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: //同上如果不允許控制台會輸出和sr相同的錯誤資訊access-control-allow-methods: get, post, put //伺服器支援的所有跨域請求方法
access-control-allow-headers: x-custom-header //允許的自定義頭資訊
伺服器返回
access-control-allow-methods: get, post, put //同上access-control-allow-credentials值只能為true,如果不允許瀏覽器傳送cookie刪除字段即可,另外在ajax請求中也必須開啟withcredentials,缺一不可,並且access-control-allow-origin不可為*,cookie仍然遵循同源策略access-control-allow-headers: x-custom-header //同上
access-control-allow-credentials: true //同上
access-control-max-age: 125000 //預檢請求的有效期,單位為秒,表明在此期間不需要再傳送新的預請求
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跨域請求
瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種 只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。當請求同時滿足下面兩個...