中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CORS實現模型有哪些

發布時間:2021-10-15 10:05:38 來源:億速云 閱讀:168 作者:iii 欄目:編程語言

本篇內容介紹了“CORS實現模型有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

CORS 實現兩種模型

1.1

簡單模型

支持 get/post/put/delete 請求,例如返回 Access-Control-Allow-Origin:*,但是不允許自定義 header 且會忽略 cookies,且 post 數據格式有限制,只支持 ‘text/plain', 'application/x-www-urlencoded'and'multipart/form-data',其中’text/plain'默認支持,后面兩種需要下面的預檢請求和服務器協商。

1.2

協商模型/預檢請求(Preflighted Request)

舉例:瀏覽器發出 PUT 請求,OPTION 請求返回 Access-Control-Allow-Origin: 允許瀏覽器的腳本執行服務器返回的數據。

跨域資源共享標準新增了一組 HTTP 首部字段,允許服務器聲明哪些源站通過瀏覽器有權限訪問哪些資源。另外,規范要求,對那些可能對服務器數據產生副作用的 HTTP 請求方法(特別是 GET 以外的 HTTP 請求,或者搭配某些 MIME 類型的 POST 請求),瀏覽器必須首先使用 OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。服務器確認允許之后,才發起實際的 HTTP 請求。在預檢請求的返回中,服務器端也可以通知客戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認證相關數據)。

2

FastAPI 利用 CORSMiddleware 中間件來實現 CORS。

2.1

使用 CORSMiddleware

我們通過以下流程在 FastAPI 應用中使用 CORSMiddleware
1、導入 CORSMiddleware
2、創建允許的 origins 列表
3、在應用中引入 CORSMiddleware 中間件
4、鑒權信息(Authorization headers, Cookies 等)
5、支持的 HTTP 方法(POST,GET,或者所有"")

from fastapi import FastAPIfrom fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [    "http://127.0.0.1",    "https://www.baidu.com",    "https://www.hao123.com",    "http://localhost:8080",]
app.add_middleware(    CORSMiddleware,    allow_origins=origins,    allow_credentials=True,    allow_methods=["*"],    allow_headers=["*"],)

@app.get("/")async def main():    return {"message": "Hello World,"}

2.2

CORSMiddleware 解析

CORSMiddleware 的參數默認值是受限制的,為了在跨域訪問中支持相應的功能,我們應當顯示指定具體參數的的信息。CORSMiddleware 支持參數信息如下:
1、allow_origins:允許跨域請求的域名列表,例如 ['https://example.org ', 'https://www.example.org'] 或者 ['']
2、allow_origin_regex:允許允許跨域請求的域名正則表達式,例如 'https://..example.org'
3、allow_methods:允許跨域請求的 HTTP 方法列表,默認為['GET'],[''] 表示允許所有 HTTP 方法

4、allow_headers:跨域請求支持的 HTTP 頭信息列表。['']表示允許所有頭信息。Accept, Accept-Language, Content-Language 和 Content-Type 頭信息默認全都支持

5、allow_credentials:表示在跨域請求時是否支持 cookie,默認為 False

6、expose_headers:表示對瀏覽器可見的返回結果頭信息,默認為[]
7、max_age:瀏覽器緩存 CORS 返回結果的最大時長,默認為 600 (單位秒)

3

請求種類

瀏覽器將 CORS 請求分成兩類:簡單請求(Simple requests)和非簡單請求,也叫預檢請求(CORS preflight requests)。

3.1

簡單請求與非簡單請求界定

只要同時滿足以下兩大條件,就屬于簡單請求。

1.請求方法是以下三種方法之一:HEAD、GET 、POST

2.HTTP 的頭信息不超出以下幾種字段:Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個值 application/x-www-form-urlencoded、multipart/form-data、text/plain 凡是不同時滿足上面兩個條件,就屬于非簡單請求。

3.2

瀏覽區處理兩種請求的區別

1、簡單請求對于簡單請求,瀏覽器直接發出 CORS 請求。具體來說,就是在頭信息之中,增加一個 Origin 字段。Origin 字段用來說明,本次請求來自哪個源(協議 + 域名 + 端口)。服務器根據這個值,決定是否同意這次請求。在這種情況下,中間件會正常傳遞請求信息,但會在返回結果中包含恰當的 CORS 頭信息。

2、預檢請求非簡單請求是那種對服務器有特殊要求的請求,比如請求方法是 PUT 或DELETE ,或者 Content-Type 字段的類型是 application/json。

非簡單請求的 CORS 請求,會在正式通信之前,增加一次 HTTP 查詢請求,稱為"預檢"請求(preflight)。

瀏覽器先詢問服務器,當前網頁所在的域名是否在服務器的許可名單之中,以及可以使用哪些 HTTP 方法和頭信息字段。只有得到肯定答復,瀏覽器才會發出正式的請求,否則就報錯。

"預檢"請求用的請求方法是 OPTIONS,表示這個請求是用來詢問的。頭信息里面,關鍵字段是 Origin,表示請求來自哪個源。

除了 Origin 字段,"預檢"請求的頭信息包括兩個特殊字段。

1.Access-Control-Request-Method 該字段是必須的,用來列出瀏覽器的 CORS 請求會用到哪些 HTTP 方法,上例是 PUT 。

2.Access-Control-Request-Headers 該字段是一個逗號分隔的字符串,指定瀏覽器 CORS 請求會額外發送的頭信息字段,上例是 X-Custom-Header。服務器收到"預檢"請求以后,檢查了 Origin、Access-Control-Request-Method 和 Access-Control-Request-Headers 字段以后,確認是否允許跨源請求,就可以做出回應。

在這種情況下,中間件會攔截請求信息并且根據是否允許跨域請求返回不同的請求結果信息。

4

與 JSONP 的比較

CORS 與 JSONP 的使用目的相同,但是比 JSONP 更強大。JSONP 只支持 GET 請求,CORS 支持所有類型的 HTTP 請求。JSONP 的優勢在于支持老式瀏覽器,以及可以向不支持 CORS 的網站請求數據。

5

CORS 總結:

1.給出 CORS 的定義
2.在 fastapi 中如何使用 CORSMiddleware 中間件實現 CORS
3.給出 CORS 與 JSONP 的比較

“CORS實現模型有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文昌市| 潼南县| 聂荣县| 石柱| 伽师县| 深泽县| 柯坪县| 商丘市| 凤城市| 南溪县| 岳普湖县| 焦作市| 洛隆县| 通河县| 平武县| 马边| 南投县| 安国市| 齐齐哈尔市| 汶川县| 宣武区| 卫辉市| 汉源县| 布拖县| 云和县| 嫩江县| 沭阳县| 辽宁省| 连山| 孝昌县| 隆昌县| 漠河县| 佛坪县| 汝阳县| 周至县| 建始县| 南投县| 高邮市| 蓝山县| 博乐市| 安泽县|