nginx配置 解決ajax請求跨域問題


文章來源:http://to-u.xyz/2016/06/30/nginx-cors/

背景描述

最近在研究RESTful API接口設計,使用的是Nginx
要實現本地http://127.0.0.1跨域訪問服務器端http://api.zlzkj.com
並且要支持DELETE PUT等請求。

跨域配置

只需要在Nginx配置文件里加入以下配置,即可開啟跨域

add_header Access-Control-Allow-Origin *;

*代表任何域都可以訪問,可以改成只允許某個域訪問,如Access-Control-Allow-Origin: http://www.zlzkj.com
這樣的配置雖然開啟了跨域請求,但只支持GET HEAD POST OPTIONS請求,使用DELETE發起跨域請求時,瀏覽器出於安全考慮會先發起OPTIONS請求,服務器端接收到的請求方式就變成了OPTIONS,所以引起了服務器的405 Method Not Allowed。

 

所以要對OPTIONS請求進行處理

if ($request_method = 'OPTIONS') { 
    add_header Access-Control-Allow-Origin *; 
    add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
    #其他頭部信息配置,省略...
    return 204; 
}

當請求方式為OPTIONS時,設置Allow的響應頭,重新處理這次請求。
配置好並重啟Nginx,刷新頁面重新發起請求,在控制台里你會發現,出現了二次請求,
第一次是OPTIONS請求,第二次才是DELETE請求,這就是對OPTIONS請求進行處理的結果,到這里總算完成了一次DELETE跨域請求了。

完整配置參考

add_header Access-Control-Allow-Origin *;
location / {
    if ($request_method = 'OPTIONS') { 
        add_header Access-Control-Allow-Origin *; 
        add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
        return 204; 
    }
    index index.php;
    try_files $uri @rewriteapp;
}

  

放到配置文件的server {}

參考文章

http://www.rails365.net/articles/cong-kua-yu-dao-cors-yi
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
https://segmentfault.com/q/1010000005837213


免責聲明!

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



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