使用Express.js和jQuery.ajax进行CORS

Ati*_*nux 4 ajax jquery node.js cors express

我使用带有以下标头的服务器的express.js:

x-powered-by: Express
connection: keep-alive
content-length: 2
content-type: application/json; charset=utf-8
access-control-allow-methods: GET,PUT,POST,DELETE
access-control-allow-origin: *
access-control-allow-headers: x-requested-with
Run Code Online (Sandbox Code Playgroud)

我打电话res.header允许CORS:

res.header("Access-Control-Allow-Origin:", "*");
res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");  
res.header("Access-Control-Allow-Headers", "x-requested-with");
Run Code Online (Sandbox Code Playgroud)

您可以在这里进行测试:http : //my-api.rs.af.cm/api/products

对于我的前端,我使用jsbin,并使用以下命令调用服务器$.ajaxhttp : //jsbin.com/apizez/37/edit

结果在这里:http : //jsbin.com/apizez/37

您可以查看JS控制台,您会看到此错误:

XMLHttpRequest cannot load http://my-api.rs.af.cm/api/products. Origin http://jsbin.com is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

我在CORS上阅读了所有其他答案,但我不想使用easyXDM。

Ati*_*nux 5

感谢Ryan Olds帮助我了解CORS请求的工作方式。

这里是正确的标题:

res.header('Access-Control-Allow-Origin', req.headers.origin || "*");
res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'content-Type,x-requested-with');
Run Code Online (Sandbox Code Playgroud)

我所有的请求在响应中都带有该标头。

我使用$.getJSONjQuery进行GET请求,否则它不起作用。

您可以在此处查看示例:http : //jsbin.com/uwevuc/2/edit

http://jsbin.com/uwevuc/2