cors實現請求跨域

2021-09-27 08:18:27 字數 1673 閱讀 3648

簡介

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跨域請求

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