Cors 阻止 Nginx 上状态为 403 的请求
Posted
技术标签:
【中文标题】Cors 阻止 Nginx 上状态为 403 的请求【英文标题】:Cors Blocks Request with status 403 on Nginx 【发布时间】:2014-07-29 23:01:43 【问题描述】:我在 nginx 上运行 CORS 时遇到了一个奇怪的问题,CORS 在所有情况下都可以正常工作,但只有一种情况是服务器响应 403 http 响应。
基本上,当我使用正确的凭据登录时,cors 请求可以正常工作,但是当我提供错误的登录凭据时,服务器(后端)会以 403 状态响应,并且出现以下错误
"NetworkError: 403 Forbidden - @987654321@"
login
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at @987654322@. This can be fixed by moving the resource to the same domain or enabling CORS.
如果凭据正确,我不会收到此错误,并且一切正常。
我已经完成了启用 CORS 的配置,它似乎对其他一切都运行良好。
以下是请求标头
请求标头
User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
Referer:@987654323@
Pragma: no-cache
Origin: @987654324@
Host: www.mydomain.com
Content-Type: application/json;charset=utf-8
Content-Length: 74
Connection: keep-alive
Cache-Control: no-cache
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Accept: application/json, text/plain, /
响应标头
Server: nginx/1.4.1
Date: Tue, 10 Jun 2014 05:28:30 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 76
Connection: keep-alive
【问题讨论】:
也许粘贴请求和响应标头将有助于回答您的问题 @Marcel 我已经用请求和响应标头更新了帖子 这看起来不是问题,RESTFUL API 意味着如果您输入错误的凭据,它会响应 403,这是应该的。 @Marcel 绝对,问题是当服务器响应 403 时,我开始在萤火虫控制台上收到 CORS 错误。 粘贴的标头中没有与 CORS 相关的标头。 【参考方案1】:nginx(>=1.75) 的一个选项是在add_header 中指定always
参数:
如果指定了always参数(1.7.5),头域将是 无论响应代码如何都添加。
【讨论】:
【参考方案2】:我假设您正在使用add_header
指令在 nginx 配置中添加 CORS 标头。
Nginx 模块引用状态关于add_header
:
如果响应代码等于 200、201、204、206、301、302、303、304 或 307,则将指定字段添加到响应标头。
要解决问题,您可以使用 ngx_headers_more
模块将 CORS 标头也设置为错误响应。
more_set_headers 'Access-Control-Allow-Origin: $http_origin';
more_set_headers 'Access-Control-Allow-Headers: Content-Type, Origin, Accept, Cookie';
【讨论】:
以上是关于Cors 阻止 Nginx 上状态为 403 的请求的主要内容,如果未能解决你的问题,请参考以下文章
我的请求是跨源请求吗?(heroku 上的 Django rest api,CORS 没有阻止我的请求)
spring CORS 和 Angular 不起作用:HTTP 状态代码 403 错误
CORS 适用于 plnkr,但不适用于浏览器:“响应具有 HTTP 状态代码 403”
跨域请求仅在 Firefox 中被阻止! [选项:403 禁止]