【问题标题】:CORS node js and apache serverCORS 节点 js 和 apache 服务器
【发布时间】:2019-05-16 07:55:22
【问题描述】:

我目前在 apache 服务器上托管一个网站(如果相关,则在拱顶上)。我需要的是能够在单击其中一个网页上的按钮后调用一个小的节点脚本(最终将发送一封电子邮件)。

目前的工作方式如下

客户端.js

$('#some-long-stupid-unique-name').click(function(){
$.ajax({
    type: 'POST',
    url: 'http://localhost:8081/sendMail'
});
});

邮件.js

var cors = require('cors');

var express = require('express');
var app = express();
app.use(cors());

app.post('/sendMail', function(req, res) {
    //req.header("Access-Control-Allow-Origin", "*");
    //res.header("Access-Control-Allow-Origin", "*");
    //res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    //next();
    console.log("Button pressed :D");
    res.json({ "A": "value"});

//run code here
});


app.listen(8081);

运行node mail.js &启动,apache服务器使用systemctl restart httpd.service启动

button.html

<!DOCTYPE html>
<html>
<head> 
    <title> some title</title>
</head>

<body>
    <div>
        <button id="some-long-stupid-unique-name" class="btn-default btn-sm back_to_options">Test</button>
    </div>
</body>
</html>

但是,在 Firefox 中,每当我点击测试按钮时,我都会看到 Cross-Origin Request Blocked: The Same Origin Policy diallows reading the remote resource at http://localhost:8081/sendMail. (Reason CORS request did not succeed.)

我一生都无法弄清楚我做错了什么:/

我假设我需要将节点配置为接受 cors,但我尝试的次数越多,我想知道这是否不正确,我实际上需要在 apache 中修复它?

iptables 中的简单防火墙是否也会影响这一点?

编辑 1:更新 mail.js

编辑 2:更新 mail.js

编辑 3:更新 mail.js

【问题讨论】:

  • 我认为端口号不同,因为它不被视为同源。所以我假设 apache 正在监听 80,而您正在向 8081 发送一个发布请求,在这种情况下,请确保“cors”实际上发送了标题“Access-Control-Allow-Origin:*”。检查网络选项卡上是否存在此标头。如果不存在,则需要添加它。
  • hmmmm 它看起来不像出现在网络选项卡中,这是我一直在使用的指南npmjs.com/package/cors,我真的没有看到任何我可以指定使用发送特定标头的地方科斯。我可以为此推动正确的方向吗?
  • 从 express.js 方面,你需要设置它,我猜是这样的:req.headers['Access-Control-Allow-Origin'] = '*'。搜索设置请求标头。请注意,HTTP 标头大小写不敏感。
  • @ibrahimtanyalcin 我已将原始帖子更新为我目前拥有的内容,但我仍然没有在网络选项卡中看到标题:/
  • 这可以帮助您似乎需要两个标题:dzone.com/articles/cors-in-node

标签: javascript node.js apache cors


【解决方案1】:

你有四样不该拥有的东西,却缺少一件你需要的东西:


以下内容是多余的。您正在使用 CORS 中间件模块。

删除这些。

req.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

这个:

next();

... 在编写中间件时使用。不是端点。在这里它会抛出一个 500 错误,导致 CORS 测试失败。

删除它。


现在你需要让你的端点用一些东西来响应请求。

如果没有响应,CORS 模块设置的响应头是没有意义的。

app.post('/sendMail', function(req, res) {
    console.log("Button pressed :D");
    res.json({ "some": "data"});
});

【讨论】:

  • 我已经用你的编辑更新了帖子。如果我只是迟钝或没有提供必要的信息,我深表歉意。但我仍然收到与最初所述相同的 cors 错误
猜你喜欢
  • 2020-02-29
  • 2018-10-24
  • 2015-11-05
  • 2016-03-09
  • 2016-09-15
  • 2019-03-03
  • 2018-09-28
  • 2016-04-24
  • 1970-01-01
相关资源
最近更新 更多