CORS跨域簡單請求與非簡單請求

2021-10-02 14:09:16 字數 2251 閱讀 5790

sr—post/get/head

nsr—put/delete

sr—one step

瀏覽器直接發出cors請求,並在頭部攜帶乙個origin欄位,伺服器根據這個值決定是否同意請求

origin:     //說明請求來自哪個源,包括協議、網域名稱、埠

host: api.eurus.com

nsr—one step

瀏覽器先傳送乙個opptions的預請求,詢問伺服器當前網頁所在的網域名稱是否在許可名單內,以及可以使用的http動詞和頭資訊,確認可以之後才會傳送cors請求,比sr多了兩個字段,下面是預檢請求的頭資訊

origin:     //同上

access-control-request-method: put    //必須字段,cors請求用到的請求方法

access-control-request-headers: x-custom-header    //額外的頭資訊字段

host: api.eurus.com

sr—second step

伺服器收到請求,檢查origin欄位,如果在允許範圍內,那麼會返回如下資訊

access-control-allow-origin:     //表示值是origin欄位的值或者是*(任意網域名稱請求都接受)

access-control-allow-credentials: true    //表示是否允許瀏覽器傳送cookie

access-control-expose-headers: my-header1    //表示可以獲取的自定義頭資訊字段

如果不在允許範圍控制台會輸出錯誤資訊

伺服器收到預請求會檢查origin、access-control-request-method、access-control-request-headers三個字段,確認允許之後預請求回應

access-control-allow-origin:     //同上

access-control-allow-methods: get, post, put    //伺服器支援的所有跨域請求方法

access-control-allow-headers: x-custom-header    //允許的自定義頭資訊

如果不允許控制台會輸出和sr相同的錯誤資訊

伺服器返回

access-control-allow-methods: get, post, put    //同上

access-control-allow-headers: x-custom-header    //同上

access-control-allow-credentials: true    //同上

access-control-max-age: 125000    //預檢請求的有效期,單位為秒,表明在此期間不需要再傳送新的預請求

access-control-allow-credentials值只能為true,如果不允許瀏覽器傳送cookie刪除字段即可,另外在ajax請求中也必須開啟withcredentials,缺一不可,並且access-control-allow-origin不可為*,cookie仍然遵循同源策略

xhr.withcredentials = true;access-control-expose-headers頭資訊中,getresponseheader()只能拿到6個字段,分別是cache-control、content-language、content-type、expires、last-modified、pragma,想要其他欄位就在這裡指定,通過getresponseheader('my-header1')可以獲取my-header1字段值

CORS跨域請求之簡單請求與非簡單請求

先來看乙個例子 定義 server01 的專案,在路由表中新增一條路由記錄 url r getdata.html views.get data 對應的檢視函式 定義 server02 專案,在路由表中新增一條路由記錄 url r index.html views.index 對應的檢視函式 from...

CORS跨域請求之簡單請求與非簡單請求

先來看乙個例子 定義server01的專案,在路由表中新增一條路由記錄 url r getdata.html views.get data 對應的檢視函式 定義server02專案,在路由表中新增一條路由記錄 url r index.html views.index 對應的檢視函式 from dja...

CORS跨域請求

瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種 只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。當請求同時滿足下面兩個...