尽管我的服务器启用了标头,但 AJAX CORS 请求失败 - (Access-Control*)
Posted
技术标签:
【中文标题】尽管我的服务器启用了标头,但 AJAX CORS 请求失败 - (Access-Control*)【英文标题】:AJAX CORS request fails although my server enables headers - (Access-Control*) 【发布时间】:2017-06-04 14:22:03 【问题描述】:我有一个应该处理 CORS DELETE 请求的 NodeJS 服务器。 我有一个中间件快递层:
app.use('/', function(req, res, next)
if(req.method == 'OPTIONS')
res.header("Access-Control-Allow-Origin" , "http://myhost.com");
res.header("Access-Control-Allow-Methods", "DELETE, OPTIONS");
else
next();
);
app.delete('/', function(req, res)
res.send('OK');
);
我的 AJAX 调用是
$.ajax( url:"http://myhost.com", type:'DELETE')
.done(function(resp)
document.body.innerhtml = resp;
)
.fail(function(jqXHR, error, errorThrown)
document.body.innerHTML = "Failed to make AJAX request";
)
在 Chrome 中,我看到了
AJAX 请求失败
如果我打开 webkit 检查器:
控制台:...请求的资源上不存在“Access-Control-Allow-Origin”标头。来源:“http://myhost.com”因此不允许访问。
我还看到 OPTIONS 请求返回有效的“Access-Control-Allow*”标头:
访问控制允许方法:删除,选项 访问控制允许来源:http://myhost.com
但是,如果我检查最终的 HTTP DELETE 请求,在网络选项卡中的选项请求之后,我会看到“确定” - 从我的服务器返回
注意:我只在 Firefox 和 Chrome 上看到这个。似乎可以在 IE 上运行
【问题讨论】:
预检并不总是被发送。在它们不是的情况下,所述标头必须在主要请求中。 在 Chrome 上试用 CORS 扩展 【参考方案1】:CORS 规范要求服务器在实际请求(DELETE
)和预检请求(OPTIONS
)上设置标头。
有关详细信息,请参阅 section 6.1,但在您的情况下,只需添加 Access-Control-Allow-Origin
响应标头即可。
【讨论】:
我真的很想了解为什么您的回答被否决了。这不准确吗?以上是关于尽管我的服务器启用了标头,但 AJAX CORS 请求失败 - (Access-Control*)的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义标头的 Ajax 请求发送到启用 CORS 的 Web API 服务器
在启用 CORS 的情况下,无法从我的请求标头中检索我的 x-api-key。为啥?
放大:即使在 API 网关和 Lambda 标头中启用了 CORS,但 CORS 标头“Access-Control-Allow-Origin”缺失错误