Answers:
即使很早以前就问过这个问题,我还是用更多模块来编译nginx,但是对于较新版本的nginx,我发现我不必自定义编译nginx,我所需要做的就是添加always
指令。
http://nginx.org/en/docs/http/ngx_http_headers_module.html
Syntax: add_header name value [always];
如果指定了always参数(1.7.5),则无论响应代码如何,都将添加标头字段。
因此,CORS标头的调整版本:
if ($cors = "trueget") {
# Tells the browser this origin may make cross-origin requests
# (Here, we echo the requesting origin, which matched the whitelist.)
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
# Tells the browser it may show the response, when XmlHttpRequest.withCredentials=true.
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
我假设您当前正在使用add_header
指令。该文档指出,这仅设置200、204、301、302和304状态代码的标头。要为404状态代码设置标头,您需要使用headers_more模块中的more_set_headers
指令(您可能需要重新编译nginx才能获得此模块)。以下将设置所有状态代码的标头:
more_set_headers 'Access-Control-Allow-Origin: *';
您还可以将其限制为特定的状态代码:
more_set_headers -s '404' 'Access-Control-Allow-Origin: *';
always
是关键。谢谢您指出这个问题,我快疯了!