这个问题已经被问了无数次了。我读过mozilla的文档,看了太多的答案,眼睛都疼了。
在我的ajax调用中,我有这样的:
$.ajax({
type: 'POST',
dataType: 'json',
data: {name: "test"},
contentType: 'application/json',
url: 'https://example.com:8443',
success: function (data) {
alert(data);
}
在我的express服务器中,我的server.js文件是这样的:
app.post('/', function (req, res) {
console.log(req.body.myData);
res.header('Access-Control-Allow-Origin: *');
res.header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
return res.end('<h1>Hello, Secure World!</h1>');
});
根据我的理解,我正确地使用dataType:'json'和contentType'application/json'进行ajax调用。
此外,我正在将访问控制允许原点设置为*,这应该允许我让任何域访问我的服务器。我不明白我做错了什么。我得到这个错误:
has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
任何帮助都将不胜感激!
我的错误很愚蠢。在express js中,这是不正确的:
res.header('Access-Control-Allow-Origin: *');
res.header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
设置实际上应该是这样的'',''
而不是':'
The correct syntax that worked is this:
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');
编辑:使用*是一个安全风险,但在这种情况下,它是一台服务器在另一台服务器上测试,这两台服务器都是我自己的。上线时,我会将*设置为example.com