nginx+uwsgi+flask:CORS跨網域錯誤解決

 我有一個以nginx+uwsgi+flask架設的Web API服務,但是在網頁呼叫該API時,瀏覽器出現了CORS跨網域錯誤。

這是瀏覽器為了安全性而設置的規則,我找到兩個方案:一個以flask來設置;另一個以nginx來設定。


flask方案(因為我用nginx架設服務,所以我不確定該方式是否有效的):

1、安裝 flask_cors 套件:pip install flask_cors  

2、程式如下:  

    from flask import Flask  

    from flask_cors import CORS  

    app = Flask(__name__)  

    CORS(app)    

    @app.route("/")  

    def helloWorld():  

        return "Hello!"  


nginx方案(我用此方案):

在設定檔nginx.conf的每個區段加入下列語法:

    add_header Access-Control-Allow-Origin *;  

    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,Authorization';  

程式範例如下:  

location /ft-prtg {

        add_header Access-Control-Allow-Origin *;

        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,Authorization';

        default_type "text/html";

        alias /test/html/test_FT.html;

    } 


重啟nginx之後,在瀏覽器的開發工具檢示其結果如下,已加在Header上了。