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

又是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)) {
        setcors "true";
    }

    if (request_method = 'OPTIONS') {
        setcors "{cors}options";  
    }
    if (request_method = 'GET') {
        set cors "{cors}get";  
    }
    if (request_method = 'POST') {
        setcors "{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的头部信息。 

如果你就是想加入这信息咋办? 

第一种方法:

可以使用more_set_headers控制.
more_set_headers 'Access-Control-Allow-Origin: *';

也可以针对404状态码来加入headers.

more_set_headers -s '404' 'Access-Control-Allow-Origin: *';

但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.


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注