Nginx CORS和非200状态代码

Nginx CORS和非200状态代码,nginx,cors,http-status-codes,Nginx,Cors,Http Status Codes,我的CORS与Nginx合作得很好。API设计用于在输入错误的情况下发送非HTTP 200状态代码,例如401、404等。问题在于,如果Chrome收到非HTTP200状态码,它会取消/中止请求。由于这个原因,我无法在Web客户端上显示确切的错误 CORS非200状态代码错误的解决方法是什么?您需要使用更多设置标题模块 使用-s,您可以指定更多的状态代码 more_set_headers-s'404400403''访问控制允许来源:http://domain.com'; 但是,如果您没有在ngi

我的CORS与Nginx合作得很好。API设计用于在输入错误的情况下发送非
HTTP 200
状态代码,例如
401
404
等。问题在于,如果Chrome收到非
HTTP200
状态码,它会取消/中止请求。由于这个原因,我无法在Web客户端上显示确切的错误


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

您需要使用更多设置标题模块

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

more_set_headers-s'404400403''访问控制允许来源: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

默认情况下,Nginx仅为其认为成功的请求添加头。您可以将
始终
参数添加到
add_header
指令中,使其添加标题而不考虑响应代码,例如

add_header 'Access-Control-Allow-Origin' '*' always;
始终
参数添加到
访问控制允许原点
标题是不够的。
始终
参数需要添加到需要始终添加的标题中。在某些情况下,您需要将
始终
参数添加到
访问控制允许凭据
标题中

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

它给出错误:
nginx:[emerg]在/etc/nginx/include.d/cors:37中的“add_header”指令中的参数数量无效这可能太晚了,但您使用的是哪个版本的nginx?在v1.7.5中添加了
始终
关键字。对于早期版本,您必须使用
更多设置标题
,如下所述。