Nginx CORS 不适用于 POST
Posted
技术标签:
【中文标题】Nginx CORS 不适用于 POST【英文标题】:Nginx CORS doesn't work for POST 【发布时间】:2016-06-27 00:57:18 【问题描述】:我的 nginx 中有这个配置
server
listen 8080;
add_header Access-Control-Allow-Origin *;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type';
现在我有我的 web 应用程序,它为 GET
执行 GET
和 POST
它工作正常,但如果我执行 Ajax POST
我会收到此错误
XMLHttpRequest 无法加载 'URL' 。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'Origin' 不允许访问。响应的 HTTP 状态代码为 404。
如果我发出“GET”请求,我可以在回复中看到这一点。
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin:*
但是,如果我发帖,我什么都看不到。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,并通过将关键字 always
添加到我的 add_header
指令来解决它。如documentation所述:
add_header
:如果响应代码等于 200、201、204、206、301、302、303、304 或 307,则将指定字段添加到响应标头。 [...]如果指定了
always
参数(1.7.5),则无论响应代码如何,都会添加标头字段。
发生的情况是,没有always
,我的GET
请求返回200
并因此具有预期的标头,而我的POST
得到400,因此没有标头并因此触发CORS 错误.
【讨论】:
为我工作,我怀疑我的问题是关于请求返回 4xx 代码(此处的预期行为)被解释为 CORS 错误,但找不到更多信息。 什么对我有用:add_header 'Access-Control-Allow-Origin' * always;以上是关于Nginx CORS 不适用于 POST的主要内容,如果未能解决你的问题,请参考以下文章