簡介
cors:全稱"跨域資源共享"(cross-origin resource sharing)。
cors需要瀏覽器和伺服器同時支援,才可以實現跨域請求,目前幾乎所有瀏覽器都支援cors,ie則不能低於ie10。cors的整個過程都由瀏覽器自動完成,前端無需做任何設定,跟平時傳送ajax請求並無差異。so,實現cors的關鍵在於伺服器,只要伺服器實現cors介面,就可以實現跨域通訊。
請求型別:
cors分為簡單請求和非簡單請求(需預檢請求)兩類
符合以下條件的,為簡單請求
在這裡,http://localhost:3001為我們當前傳送請求的源,如果伺服器發現請求在指定的源範圍內,則會返回響應的請求結果, 否則會在控制台報錯,如下圖所示,在這裡需要注意的是,儘管請求失敗,但返回的狀態碼依然可能為200。所以在做處理時需要格外注意。
非簡單請求(預檢請求)
如果非簡單請求(預檢請求)傳送成功,則會在頭部多返回以下字段
access-control-allow-origin: http://localhost:3001 //該欄位表明可供那個源跨域
access-control-allow-methods: get, post, put // 該欄位表明服務端支援的請求方法
access-control-allow-headers: x-custom-header // 實際請求將攜帶的自定義請求首部字段
下圖為乙個預檢請求例項:
紅框標註的為預檢請求傳送的查詢,服務端支援我們的請求後,將會傳送我們真正的請求,圖中綠框所示。可以看到,真正的請求響應頭欄位多處藍框中所圈字段。這為伺服器所支援cors請求型別和允許的自定義請求首部字段,以及支援跨域的源。
例項**
前端**與傳送普通請求沒有差異,我們只需在服務端設定即可,以node為例:
cors欄位介紹:
(1)access-control-allow-methods
該欄位必需,它的值是逗號分隔的乙個字串,表明伺服器支援的所有跨域請求的方法。注意,返回的是所有支援的方法,而不單是瀏覽器請求的那個方法。這是為了避免多次"預檢"請求。
(2)access-control-allow-headers
如果瀏覽器請求包括access-control-request-headers欄位,則access-control-allow-headers欄位是必需的。它也是乙個逗號分隔的字串,表明伺服器支援的所有頭資訊字段,不限於瀏覽器在"預檢"中請求的字段。
(3)access-control-allow-credentials
該字段與簡單請求時的含義相同。
(4)access-control-max-age
該欄位可選,用來指定本次預檢請求的有效期,單位為秒。上面結果中,有效期是20天(1728000秒),即允許快取該條回應1728000秒(即20天),在此期間,不用發出另一條預檢請求。
總結:總的來說,使用cors簡單請求,非常容易,對於前端來說無需做任何配置,與傳送普通ajax請求無異。唯一需要注意的是,需要攜帶cookie資訊時,需要將withcredentials設定為true即可。cors的配置,完全在後端設定,配置起來也比較容易,目前對於大部分瀏覽器相容性也比較好。cors優勢也比較明顯,可以實現任何型別的請求,相較於jsonp跨域只能使用get請求來說,也更加的便於我們使用。關於jsonp跨域請求的實現,可以參照我另外一篇文章jsonp跨域原理
CORS實現跨域請求
1.cors是什麼?1.隨著技術的發展,現在的瀏覽器可以支援主動設定從而允許跨域請求,即 跨域 資源共享 cors,cross origin resource sharing 2.其本質是設定響應頭,使得瀏覽器允許跨域請求。2 簡單請求必須滿足的兩個條件 不滿足就是 複雜請求 簡單請求 一次請求 非...
cors實現請求跨域
cors 全稱 跨域資源共享 cross origin resource sharing cors需要瀏覽器和伺服器同時支援,才可以實現跨域請求,目前幾乎所有瀏覽器都支援cors,ie則不能低於ie10。cors的整個過程都由瀏覽器自動完成,前端無需做任何設定,跟平時傳送ajax請求並無差異。so,...
CORS跨域請求
瀏覽器的同源策略會導致跨域,這裡同源策略又分為以下兩種 只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域,之間的請求就是跨域操作。在同源策略下會禁止跨域,實際上跨域請求時,請求會向伺服器發出,伺服器也會進行響應,但是當收到返回的資料時發現跨域所以忽略了返回的內容並報錯。當請求同時滿足下面兩個...