Flask中,跨域請求主要有兩種方式:
1、在響應頭信息中添加允許跨域
如下,使用裝飾器app.after_request(我這里的web是定義的藍圖),這樣在每次請求后,加入header
2、使用第三方插件 flask-cors
參考官方文檔:https://flask-cors.readthedocs.io/en/latest/
首先,默認情況下,跨域會導致禁用cookie,還有確保已經做了csrf 攻擊處理
1、安裝:pip install flask-cors
2、使用:
1)最簡單的使用方式:全局配置
使用默認參數初始化Flask-Cors,這樣,所有的請求都將被允許跨域
from flask-cors import CORS
app = Flask(__name__)
CORS(app) # 直接將核心對象app作為參數
2)使用 @cross_origin 裝飾器配置,這樣可以有針對性的指定那些視圖函數允許跨域
@cross_origin
def helloWorld():
return "hello world"
3)配置指定路徑下的視圖函數允許跨域(類似第一種,但是可以指定范圍)
CORS(app, resource={r"/api/*" : {"origins" : "*"}})
api路徑下的所有視圖函數都允許跨域訪問
@app.router("/api/hello")
def helloWorld():
return "hello world"
4)單獨配置藍圖
web = Blueprint("web", __name__)
CORS(web)
@web.router("/hello")
def helloWorld():
return "hello world"
3、常用CORS參數說明:
參數 | 類型 | 對應的Header字段 | 說明 |
resource | 字典、迭代器或者字符串 | 無 | 全局配置允許跨域的API接口 |
origins | 列表,字符串或者正則表達式 | Access-Control-Allow-Origin | 配置允許跨域訪問的源,* 表示允許所有 |
methods | 列表,字符串 | Access-Control-Allow-Methods | 配置跨域支持的請求方式,如GET,POST等 |
allow_headers | 列表,字符串或者正則表達式 | Access-Control-Request-Headers | 配置允許跨域的請求頭 |
support_credentials | 布爾 | Access-Control-allow-Credentials | 是否允許請求發送cookie,false是不允許 |
4、flask-cors日志的使用
logging.getLogger("flask_cors").level = logging.DEBUG