Flask配置Cors跨域

1 跨域的理解

image

跨域是指:瀏覽器A服務(wù)器B獲取的靜態(tài)資源,包括Html、Css、Js,然后在Js中通過Ajax訪問C服務(wù)器的靜態(tài)資源或請求。即:瀏覽器A從B服務(wù)器拿的資源,資源中想訪問服務(wù)器C的資源。

同源策略是指:瀏覽器A服務(wù)器B獲取的靜態(tài)資源,包括Html、Css、Js,為了用戶安全,瀏覽器加了限制,其中的Js通過Ajax只能訪問B服務(wù)器的靜態(tài)資源或請求。即:瀏覽器A從哪拿的資源,那資源中就只能訪問哪。

同源是指:同一個請求協(xié)議(如:Http或Https)、同一個Ip、同一個端口,3個全部相同,即為同源。

2 跨域的處理

跨域的這種需求還是有的,因此,W3C組織制定了一個Cross-Origin Resource Sharing規(guī)范,簡寫為Cors,現(xiàn)在這個規(guī)范已經(jīng)被大多數(shù)瀏覽器支持,從而,處理跨域的需求。

Cors需要在后端應(yīng)用進行配置,因此,是一種跨域的后端處理方式,這么做也容易理解,一個你不認識的源來訪問你的應(yīng)用,自然需要應(yīng)用進行授權(quán)。除了后端處理方式,也有前端的解決方案,如:JSONP,因這里我們主要講解Flask對Cors的配置,暫不對前端解決方案進行詳細說明。

3 跨域的分類

跨域分為以下3種

名稱 英文名 說明
簡單請求 Simple Request 發(fā)起的Http請求符合:

1.無自定義請求頭,
2.請求動詞為GET、HEAD或POST之一,
3.動詞為POST時,Content-Type是application/x-www-form-urlencoded,
multipart/form-data或text/plain之一 |
| 預(yù)檢請求 | Preflighted Request | 發(fā)起的Http請求符合其中之一:
1.包含了自定義請求頭,
2.請求動詞不是GET、HEAD或POST,
3.動詞是POST時, Content-Type不是application/x-www-form-urlencoded,
multipart/form-data或text/plain。 即:簡單請求的相反 |
| 憑證請求 | Requests with Credential | 發(fā)起的Http請求中帶有憑證 |

4 Flask配置Cors

Flask配Cors跨域,使用Flask-CORS包,詳細文檔,參見: https://flask-cors.readthedocs.io/en/latest/,總的來說,flask-cors包也提供了兩種方式

方式 范圍 說明
@cross_origin裝飾器 配置單個路由 適用于配置特定的API接口
CORS函數(shù) 配置全局API接口 適用于全局的API接口配置

3.1 安裝flask-cors

<pre>pip install flask-cors</pre>

flask-cors的官方文檔

3.2 使用@cross_origin裝飾器

<pre>@app.route("/")
@cross_origin()
def helloWorld():
return "Hello, cross-origin-world!"</pre>

裝飾器參數(shù) 類型 Head字段 說明
origins 列表、字符串或正則表達式 Access-Control-Allow-Origin 配置允許跨域訪問的源,
*表示全部允許
methods 列表、字符串 Access-Control-Allow-Methods 配置跨域支持的請求方式,
如:GET、POST
expose_headers 列表、字符串 Access-Control-Expose-Headers 自定義請求響應(yīng)的Head信息
allow_headers 列表、字符串或正則表達式 Access-Control-Request-Headers 配置允許跨域的請求頭
supports_credentials 布爾值 Access-Control-Allow-Credentials 是否允許請求發(fā)送cookie,
false是不允許
max_age 整數(shù)、字符串 Access-Control-Max-Age 預(yù)檢請求的有效時長

3.3 使用CORS函數(shù)

3.3.1 應(yīng)用全局配置

<pre>app = Flask(name)
cors = CORS(app, resources={r"/api/": {"origins": ""}})

@app.route("/api/v1/users")
def list_users():
return "user example"</pre>

3.3.2 單獨Blueprints配置

<pre>api_v1 = Blueprint('API_v1', name)
CORS(api_v1)

@api_v1.route("/api/v1/users/")
def list_users():
return "user example"</pre>

3.3.3 CORS參數(shù)說明

參數(shù) 類型 Head字段 說明
resources 字典、迭代器或字符串 全局配置允許跨域的API接口
origins 列表、字符串或正則表達式 Access-Control-Allow-Origin 配置允許跨域訪問的源,
*表示全部允許
methods 列表、字符串 Access-Control-Allow-Methods 配置跨域支持的請求方式,
如:GET、POST
expose_headers 列表、字符串 Access-Control-Expose-Headers 自定義請求響應(yīng)的Head信息
allow_headers 列表、字符串或正則表達式 Access-Control-Request-Headers 配置允許跨域的請求頭
supports_credentials 布爾值 Access-Control-Allow-Credentials 是否允許請求發(fā)送cookie,
false是不允許
max_age 整數(shù)、字符串 Access-Control-Max-Age 預(yù)檢請求的有效時長

from:

https://flask-cors.readthedocs.io/en/latest/index.html

https://blog.csdn.net/qq_37193537/article/details/90787198

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目1.什么是同源策略? 同源策略(Same origin Policy): 瀏覽器出于安全方面的考慮,只允許與本...
    FLYSASA閱讀 1,876評論 0 6
  • 前沿: 最近總聽到同事聊跨域得問題,于是自己抽空仔細的查閱了一下關(guān)于跨域的知識。說到跨域,就得提到同源,跨域是指一...
    戈弋圖閱讀 1,927評論 0 4
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,412評論 0 6
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    他方l閱讀 1,134評論 0 2
  • 瀏覽器基于安全(用戶隱私)考慮,不允許不同域名的網(wǎng)站之間互相調(diào)用ajax,只是不允許ajax,其他的還是允許的。但...
    學(xué)的會的前端閱讀 744評論 0 3

友情鏈接更多精彩內(nèi)容