带有 Node.js 和 jQuery 的 CORS

Posted

技术标签:

【中文标题】带有 Node.js 和 jQuery 的 CORS【英文标题】:CORS with Node.js and jQuery 【发布时间】:2012-09-02 10:02:30 【问题描述】:

我需要向不提供 javascript 的 Node 服务器发送一些数据。我运行服务器,但从未看到 OPTIONS 发送,并且 Chrome 拒绝我的 ajax 来自不同的域。]

我的服务器:

var http = require('http');
var router = require('router');
var routing = router();
var server = http.createServer(routing);
routing.options('*', function(request, response)
  console.log("OPTIONS BEING SENT");
  var origin = (request.headers.origin || "*");
  response.writeHead("204",
                     "No Content",
                      "access-control-allow-origin": origin,
                     "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
                     "access-control-allow-headers": "content-type, accept",
                     "access-control-max-age": 10,
                     "content-length": 0
                   );
  response.end();
);

server.listen(7738);

我的 js 发送的是 jqxhr = $.get('localhost:7738/post/trackEvent/' + eventName);,但我从来没有看到 OPTIONS 被发送。如果我使用其他工具通过 OPTIONS 请求访问服务器,它会按预期工作。

更新:

http://localhost:7738/post/trackEvent/MoneyInTheBank 发送 OPTIONS 请求来访问服务器会返回:

HTTP/1.1 204 No Content
Content-Length: 0
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Access-Control-Allow-Headers: Content-Type, Accept
Access-Control-Max-Age: 10
Connection: close

【问题讨论】:

看来您的问题是由于 JavaScript 同域问题。见***.com/questions/3076414/… 【参考方案1】:

只有预检请求发送 OPTIONS 标头,并且由于您的 ajax 请求是一个带有简单标头的简单方法,因此不会向服务器发送任何 OPTIONS。

详情请查看W3C 和MDN

【讨论】:

我将方法更改为 PUT,但它仍然抱怨 OPTIONS localhost:7738/post/trackEvent/MoneyInTheBank Resource failed to load 。如果我可以使用 OPTIONS ping 该地址并且它的行为符合预期,为什么会这样? 擦除一个简单的 Rails 应用程序可以解决这个问题。 Chrome 只是不喜欢来自文件的来源。

以上是关于带有 Node.js 和 jQuery 的 CORS的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 和 Node.js 有啥区别? [关闭]

本机 node.js:如何包含 css? [关闭]

使用 node.js 和 express 的 JQuery Ajax 发布请求

Node.js 和 JQuery:“ReferenceError:$ 未定义”错误。如何在服务器上将 jquery 与节点一起使用?

需要 Node.js 和 Angular 来进行 ui-select

以 node.js 作为后端的 HTML 中的 jQuery