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另外,還可以通過新增 filter 的方式,配置 cors 規則,並手動指定對哪些介面有效。public
webmvcconfigurer corsconfigurer() };}
@bean無論是通過哪種方式配置public
filterregistrationbean corsfilter()
cors
,其實都是在構造corsconfiguration
。 乙個cors
配置用乙個corsconfiguration
類來表示,它的定義如下:
public class corsconfiguration
spring
中對cors
規則的校驗,都是通過委託給defaultcorsprocessor
實現的。
defaultcorsprocessor
處理過程如下:
判斷依據是header
中是否包含origin
。如果包含則說明為cors
請求,轉到 2;否則,說明不是cors
請求,不作任何處理。
判斷response
的header
是否已經包含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開發中跨域是難免的問題,或是開發時的跨域,或是線上資源請...