CORS和非200 statusCode

问题描述 投票:10回答:2

我让CORS与Nginx运作良好。这些API的设计目的是为错误的输入发送非200状态代码(例如401、404等)。问题在于,如果Chrome收到非200状态代码,则会取消/中止该请求。由于这个原因,我无法在Web客户端上显示确切的错误。

CORS非200状态代码错误的解决方法是什么?

nginx cors http-status-codes
2个回答
10
投票

默认情况下,Nginx仅为它认为成功的请求添加标头。您可以通过将always参数添加到您的add_header指令中来使它添加标题而无需考虑响应代码,例如

add_header 'Access-Control-Allow-Origin' '*' always;

仅将'always'参数添加到'Access-Control-Allow-Origin'标头是不够的。 'always'参数需要添加到需要始终添加的标头中。在某些情况下,您需要将'always'参数添加到'Access-Control-Allow-Credentials'标头中。

add_header 'Access-Control-Allow-Credentials' 'true' always;

1
投票

您需要使用more_set_headers模块。

使用-s可以指定更多状态代码

more_set_headers -s '404,400,403' 'Access-Control-Allow-Origin: http://domain.com';

但是,如果您尚未在nginx中安装此模块,则需要重新编译它。编译它:

wget http://nginx.org/download/nginx-1.7.8.tar.gz
git clone https://github.com/openresty/headers-more-nginx-module.git
tar -xzvf nginx-1.7.8.tar.gz
cd nginx-1.7.8
./configure --prefix=/opt/nginx --add-module=/path/to/headers-more-nginx-module
make
make install
© www.soinside.com 2019 - 2024. All rights reserved.