nginx跨域問題中Credentials和Origin配置


挨實際開發中遇到請求跨域的問題一般有兩種解決辦法:

1.如果接口是請求后台,那么在后台寫攔截器,攔截所有OPTIONS請求並返回200

2.如果接口是通過nginx去訪問后台,那么可以在nginx直接攔截

問題描述:

現在有一個提供給其他廠商的接口跨域,接口地址是nginx地址。

解決辦法:

在nginx  location中加上配置如下:

1 if ($request_method = 'OPTIONS') {
2               add_header Access-Control-Allow-Origin '*';
3             add_header Access-Control-Allow-Methods 'POST,OPTIONS,GET';
4             add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
5         add_header Access-Control-Allow-Credentials 'true';
6         add_header Allow 'POST, OPTIONS';
7         add_header Content-Type 'text/plain;charset=utf-8';
8          return 200;
9 }  

 

這樣加入配置,用chrome瀏覽器調試的時候發現,OPTIONS請求返回200,但是卻沒有POST請求,意味着OPTIONS請求有問題。打開火狐瀏覽器,調試工具發現OPTIONS報錯,報錯信息如下:

已攔截跨源請求:同源策略禁止讀取位於 http://ip:port/xxxxx/的遠程資源。(原因:CORS 頭缺少 'Access-Control-Allow-Origin')。

查閱資料后發現問題:

如果在指定Access-Control-Allow-Credentials 'true'后,就不能指定Access-Control-Allow-Origin為*,必須將其指定為具體的地址,修改如下:

1 if ($request_method = 'OPTIONS') {
2               add_header Access-Control-Allow-Origin $http_origin;
3             add_header Access-Control-Allow-Methods 'POST,OPTIONS,GET';
4             add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
5         add_header Access-Control-Allow-Credentials 'true';
6         add_header Allow 'POST, OPTIONS';
7         add_header Content-Type 'text/plain;charset=utf-8';
8          return 200;
9         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM