CORS跨域請求

2021-08-20 11:35:08 字數 2514 閱讀 6034

瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種

只要協議、網域名稱、埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。

在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。

當請求同時滿足下面兩個條件時,瀏覽器會直接傳送get請求,在同乙個請求中做跨域許可權的驗證。

請求方法是下列之一:

請求頭中的content-type請求頭的值是下列之一:

multipart/form-data

text/plain

簡單請求時,瀏覽器會直接傳送跨域請求,並在請求頭中攜帶origin 的header,表明這是乙個跨域的請求。

伺服器端接到請求後,會根據自己的跨域規則,通過access-control-allow-origin和access-control-allow-methods響應頭,來返回驗證結果。

當請求滿足下面任意乙個條件時,瀏覽器會先傳送乙個option請求,用來與目標網域名稱伺服器協商決定是否可以傳送實際的跨域請求。

請求方法不是下列之一:

請求頭中的content-type請求頭的值不是下列之一:

multipart/form-data

text/plain

瀏覽器在發現頁面中有上述條件的動態跨域請求的時候,並不會立即執行對應的請求**,而是會先傳送preflighted requests(預先驗證請求),preflighted requests是乙個option請求,用於詢問要被跨域訪問的伺服器,是否允許當前網域名稱下的頁面傳送跨域的請求。

options請求頭部中會包含以下頭部:origin、access-control-request-method、access-control-request-headers。

伺服器收到options請求後,設定access-control-allow-origin、access-control-allow-method、access-control-allow-headers頭部與瀏覽器溝通來判斷是否允許這個請求。

如果preflighted requests驗證通過,瀏覽器才會傳送真正的跨域請求。

origin

origin頭在跨域請求或預先請求中,標明發起跨域請求的源網域名稱。

access-control-request-method

access-control-request-method頭用於表明跨域請求使用的實際http方法

access-control-request-headers

access-control-request-headers用於在預先請求時,告知伺服器要發起的跨域請求中會攜帶的請求頭資訊

access-control-allow-origin

access-control-allow-origin頭中攜帶了伺服器端驗證後的允許的跨域請求網域名稱,可以是乙個具體的網域名稱或是乙個*(表示任意網域名稱)。簡單請求時,瀏覽器會根據此響應頭的內容決定是否給指令碼返回相應內容,預先驗證請求時,瀏覽器會根據此響應頭決定是否傳送實際的跨域請求。

access-control-expose-headers

access-control-expose-headers頭用於允許返回給跨域請求的響應頭列表,在列表中的響應頭的內容,才可以被瀏覽器訪問。

access-control-max-age

access-control-max-age用於告知瀏覽器可以將預先檢查請求返回結果快取的時間,在快取有效期內,瀏覽器會使用快取的預先檢查結果判斷是否傳送跨域請求。

access-control-allow-credentials

access-control-allow-credentials用於告知瀏覽器當withcredentials屬性設定為true時,是否可以顯示跨域請求返回的內容。簡單請求時,瀏覽器會根據此響應頭決定是否顯示響應的內容。預先驗證請求時,瀏覽器會根據此響應頭決定在傳送實際跨域請求時,是否攜帶認證資訊。

access-control-allow-methods

access-control-allow-methods用於告知瀏覽器可以在實際傳送跨域請求時,可以支援的請求方法,可以是乙個具體的方法列表或是乙個*(表示任意方法)。簡單請求時,瀏覽器會根據此響應頭的內容決定是否給指令碼返回相應內容,預先驗證請求時,瀏覽器會根據此響應頭決定是否傳送實際的跨域請求。

access-control-allow-headers

access-control-allow-headers用於告知瀏覽器可以在實際傳送跨域請求時,可以支援的請求頭,可以是乙個具體的請求頭列表或是乙個*(表示任意請求頭)。簡單請求時,瀏覽器會根據此響應頭的內容決定是否給指令碼返回相應內容,預先驗證請求時,瀏覽器會根據此響應頭決定是否傳送實際的跨域請求。

cors跨域請求

前端使用正常的ajax請求,請求url填寫需要跨域訪問的url 服務端在檢視函式中對response設定access control allow origin欄位 例如def service request 告訴瀏覽器發的請求是合法的 response access control allow or...

CORS 跨域請求原理

摘要 cors,乙個看似有點 冷門 的領域,但在日常開發中實際上經常碰到這方面的問題。縱觀各大技術論壇,卻沒有幾個帖子能講透cors的那點事,本期雲享團邀請嘉賓深扒了cors的中外家史,為你打通跨域請求的 任督二脈 在日常的專案開發時會不可避免的需要進行跨域操作,而在實際進行跨域請求時,經常會遇到類...

Ajax跨域請求 CORS

ajax跨域請求 cors cors,又稱跨域資源共享,英文全稱cross origin resource sharing。假設我們想使用ajax從a.com的頁面上向b.com的頁面上要點資料,通常情況由於同源策略,這種請求是不允許的,瀏覽器也會返回 源不匹配 的錯誤,所以就有了 跨域 這個說法。...