在nginx配置cors请求的headers头部信息

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

又是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.

 

转载于:https://my.oschina.net/u/200350/blog/1506463

你可能感兴趣的:(运维,python,后端)