2019独角兽企业重金招聘Python工程师标准>>>
又是cors跨域…
cors是啥? 就是跨域请求。对于cors这我就不多讲了,上次有一篇ajax cors cookie的文章专门描述了跨域请求出现的问题。 一朋友在群里问关于nginx cors header的问题。 趁这机会聊下nginx cors的相关配置,及非正常情况下http code的配置。
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。
http://xiaorui.cc/?p=2876
允许哪个域名来访问资源
add_header 'Access-Control-Allow-Origin' "$http_origin";
请求的返回内容里包含cookies
add_header 'Access-Control-Allow-Credentials' 'true';
允许请求的method
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
下面是关于nginx add_header cors的配置实例。
#xiaorui.cc
location / {
if ($http_origin ~* (xiaorui.cc\.address\.sina)) {
set $cors "true";
}
if ($request_method = 'OPTIONS') {
set $cors "${cors}options";
}
if ($request_method = 'GET') {
set $cors "${cors}get";
}
if ($request_method = 'POST') {
set $cors "${cors}post";
}
if ($cors = "true") {
# Catch all incase there's a request method we're not dealing with properly
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
if ($cors = "trueget") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
可以用这个方式测试.
curl -I -X OPTIONS -H “Origin: http://www.example.com” http://www.xiaorui.cc
http://wiki.nginx.org/NginxHttpHeadersMoreModule#more_set_headers
其中有个问题需要说明下,如果请求的资源不存在,也就是404 not found状态。
那么nginx cors返回给客户的内容里是没有关于cors的信息的,估摸是nginx认为你这都404了,还要啥cors的头部信息。
如果你就是想加入这信息咋办?
第一种方法:
可以用这个方式测试.
curl -I -X OPTIONS -H “Origin: http://www.example.com” http://www.xiaorui.cc
http://wiki.nginx.org/NginxHttpHeadersMoreModule#more_set_headers
其中有个问题需要说明下,如果请求的资源不存在,也就是404 not found状态。
那么nginx cors返回给客户的内容里是没有关于cors的信息的,估摸是nginx认为你这都404了,还要啥cors的头部信息。
如果你就是想加入这信息咋办?
第一种方法:
但more_set_headers需要nginx扩展支持的。 详细资料 https://github.com/openresty/headers-more-nginx-module#installation
wget 'http://nginx.org/download/nginx-1.9.7.tar.gz'
tar -xzvf nginx-1.9.7.tar.gz
cd nginx-1.9.7/
./configure --prefix=/opt/nginx \
--add-module=/path/to/headers-more-nginx-module
make
make install
第二种方法:
在你的后端web服务器里做相应的配置,如果没有cors? 那么自己扩展吧。
END.