我使用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
我打电话给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");
您可以在此处测试:http://my-api.rs.af.cm/api/products
对于我的前端,我使用jsbin并使用$.ajax
调用我的服务器:http://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.
我在CORS上阅读了所有其他答案,我不想使用easyXDM。
答案 0 :(得分:4)
感谢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');
我的所有请求都在其回复中包含了标题。
我使用$.getJSON
用于使用jQuery的GET请求,否则它不起作用。
您可以在此处查看示例: http://jsbin.com/uwevuc/2/edit
答案 1 :(得分:0)
您还必须考虑您的预检请求。我建议你在你的项目中添加“cors”npm 包,并使用以下配置启动它:
const cors = require('cors');
app.use(cors({
credentials: true,
preflightContinue: true,
methods: ['GET', 'POST', 'PUT', 'PATCH , 'DELETE', 'OPTIONS'],
origin: true
});
这将为使用所列方法的任何地址启用跨源请求。 origin 参数非常灵活,例如可以分隔一组地址、所有地址或通过正则表达式。这是包文档: