CORS 跨域資源共享

2022-07-18 06:39:10 字數 2236 閱讀 4169

cors是乙個w3c標準,全稱是」跨域資源共享」(cross-origin resource sharing)。它允許瀏覽器向跨源伺服器,發出xmlhttprequest請求,從而克服了ajax只能同源使用的限制。但同時也會帶來安全的隱患,其中最主要的隱患來自於csrf(cross-site request forgery)跨站請求偽造。

瀏覽器將cors請求分成了簡單請求和非簡單請求

簡單請求條件如下,不滿足則為非簡單請求。對於非簡單請求的跨源請求,瀏覽器會在真實請求發出前,增加一次option請求,稱為預檢請求(preflight request)。預檢請求將真實請求的資訊,包括請求方法、自定義頭欄位、源資訊新增到 http 頭資訊欄位中,詢問伺服器是否允許這樣的操作。

@crossorigin(origins = )

public

string greetings() ";

}

@crossorigin(origins = )

@restcontroller

public

class

}

@bean

public

webmvcconfigurer corsconfigurer() };}

另外,還可以通過新增 filter 的方式,配置 cors 規則,並手動指定對哪些介面有效。

@bean

public

filterregistrationbean corsfilter()

無論是通過哪種方式配置cors,其實都是在構造corsconfiguration。 乙個cors配置用乙個corsconfiguration類來表示,它的定義如下:

public class corsconfiguration 

spring中對cors規則的校驗,都是通過委託給defaultcorsprocessor實現的。

defaultcorsprocessor處理過程如下:

判斷依據是header中是否包含origin。如果包含則說明為cors請求,轉到 2;否則,說明不是cors請求,不作任何處理。

判斷responseheader是否已經包含access-control-allow-origin,如果包含,證明已經被處理過了, 轉到 3,否則不再處理。

判斷是否同源,如果是則轉交給負責該請求的類處理

是否配置了cors規則,如果沒有配置,且是預檢請求,則拒絕該請求,如果沒有配置,且不是預檢請求,則交給負責該請求的類處理。如果配置了,則對該請求進行校驗。

1 access-control-allow-origin

該欄位必填。它的值要麼是請求時origin欄位的具體值,要麼是乙個*,表示接受任意網域名稱的請求。

2 access-control-allow-methods

該字段非簡單請求時必填。它的值是逗號分隔的乙個具體的字串或者*,表明伺服器支援的所有跨域請求的方法。注意,返回的是所有支援的方法,而不單是瀏覽器請求的那個方法。這是為了避免多次"預檢"請求。

3 access-control-expose-headers

4.3 該欄位可選。cors請求時,xmlhttprequest物件的getresponseheader()方法只能拿到6個基本字段:cache-control、content-language、content-type、expires、last-modified、pragma。如果想拿到其他字段,就必須在access-control-expose-headers裡面指定。

5 access-control-max-age

該欄位可選,用來指定本次預檢請求的有效期,單位為秒。在有效期間,不用發出另一條預檢請求。 

跨域資源共享 CORS

cors需要瀏覽器和伺服器同時支援。目前,所有瀏覽器都支援該功能。前端 對應於前端請求來說cors通訊與同源的ajax通訊沒有差別,完全一樣。瀏覽器一旦發現ajax請求跨源,就會自動新增一些附加的頭資訊,有時還會多出一次附加的請求,但使用者不會有感覺。後端 只要伺服器實現了cors介面,就可以跨源通...

跨域資源共享 CORS

跨域資源共享 cross origin resource sharing 是一種機制,它使用額外的 http 頭部告訴瀏覽器可以讓乙個web應用進行跨域資源請求。若乙個請求同時滿足下述所有條件,則該請求可視為 簡單請求 注 灰色字型內容了解即可 手動設定的頭部字段只能是 注意 也可以設定 forbi...

CORS 跨域資源共享

foreword cors principle 三個訪問控制場景 簡單請求 預請求帶憑據的請求 http請求頭 http響應頭 ie對cors的實現 瀏覽器的支援 由於同源策略限制從乙個源載入的文件或指令碼與來自另乙個源的資源進行互動。在web開發中跨域是難免的問題,或是開發時的跨域,或是線上資源請...