一、簡介
出於安全考慮,並不是所有網域名稱訪問後端服務都可以。其實在正式跨域之前,瀏覽器會根據需要發起一次預檢(也就是option請求),用來讓服務端返回允許的方法(如get、post),被跨域訪問的origin(**或者域),還有是否需要credentials(認證資訊)等。那麼瀏覽器在什麼情況下能預檢呢?
二、兩種請求方式
瀏覽器將cors請求分為兩類:簡單請求(****** request)和非簡單請求(not-******-request),簡單請求瀏覽器不會預檢,而非簡單請求會預檢。這兩種方式怎麼區分?
同時滿足下列三大條件,就屬於簡單請求,否則屬於非簡單請求
1.請求方式只能是:get、post、head
2.http請求頭限制這幾種字段:accept、accept-language、content-language、content-type、last-event-id
對於簡單請求,瀏覽器直接請求,會在請求頭資訊中,增加乙個origin欄位,來說明本次請求來自哪個源(協議+網域名稱+埠)。伺服器根據這個值,來決定是否同意該請求,伺服器返回的響應會多幾個頭資訊字段,如圖所示:上面的頭資訊中,三個與cors請求相關,都是以access-control-開頭。
1.access-control-allow-origin:該字段是必須的,* 表示接受任意網域名稱的請求,還可以指定網域名稱
2.access-control-allow-credentials:該欄位可選,是個布林值,表示是否可以攜帶cookie,(注意:如果access-control-allow-origin欄位設定*,此欄位設為true無效)
3.access-control-allow-headers:該欄位可選,裡面可以獲取cache-control、content-type、expires等,如果想要拿到其他字段,就可以在這個欄位中指定。比如圖中指定的guazisso
很明顯,請求頭中預檢請求不會攜帶cookie,正式請求會攜帶cookie和引數。跟普通請求一樣,響應頭也會增加同樣字段。
一旦伺服器通過了「預檢」請求,以後每次瀏覽器正常的cors請求,就都跟簡單請求一樣。
java 跨域解決(OPTIONS)
一般跨域解決只需要在tomcat conf下web.xml 裡面設定 corsfilter org.apache.catalina.filters.corsfilter cors.allowed.origins cors.allowed.methods get,post,head,options,p...
OPTIONS 方法在跨域請求(CORS)中的應用
options 方法比較少見,該方法用於請求伺服器告知其支援哪些其他的功能和方法。通過 options 方法,可以詢問伺服器具體支援哪些方法,或者伺服器會使用什麼樣的方法來處理一些特殊資源。可以說這是乙個探測性的方法,客戶端通過該方法可以在不訪問伺服器上實際資源的情況下就知道處理該資源的最優方式。既...
http協議 跨域問題
具有相同協議,網域名稱和埠的頁面,則具有相同的源,即它們是來自同乙個服務的資源 如,對 進行同源檢測 url結果原因 成功成功 失敗不同協議 https和http 失敗不同埠 81和80 失敗不同網域名稱 news和store 注 1 埠和協議的不同,只能通過後台來解決 2 網域名稱和實際ip位址屬...