cors跨域解決方案知識點補充

2021-10-12 22:13:40 字數 1769 閱讀 8278

我們通常所說的跨域,指的是瀏覽器行為

從這個意義上來說,使用可信度高的瀏覽器顯得尤為重要,小廣告彈出來安裝的瀏覽器就不要使用了,此時資料的安全性將得不到任何保障;

協議跨域

主機跨域

埠跨域

常見的跨域解決方案有:

jsonp (json with padding), 一種非官方解決方案。需要後端參與。侷限性是,只支援 get請求跨域

cors(cross-origin resource sharing),官方解決方案;需要後端參與。 cors規範中,新增了一組http首部字段,允許伺服器宣告其提供的資源允許哪些站點跨域使用。

nginx**,**到同域,通過部署方案規避跨域問題; 名稱

設定方作用

作用規則

生成時機

access-control-allow-origin

服務端被允許跨域進入的站點

* :匹配所有站點,如果瀏覽器發起請求時需要攜帶憑證資訊,則不能設定為*

: 匹配具體站點,在響應頭中,vary欄位需要攜帶 origin屬性

請求access-control-max-methods

服務端被允許跨域的方法

多個方法間,逗號隔開

預檢請求

access-control-allow-headers

服務端被允許的首部字段

多個首部字段,用逗號隔開

預檢請求

access-control-max-age

服務端指定預檢有效期

單位為秒,有效期內,預檢請求不再發起

請求access-control-allow-credentials

服務端設定後,允許瀏覽器在請求中攜帶使用者憑證資訊

設定該屬性後,access-control-allow-origin不應該設定為*

請求名稱

匹配規則

工作原理

實踐表現

簡單請求

請求時,會在請求頭中,自動新增乙個origin屬性,指向當前頁面的url首部;

返回響應後,若access-control-allow-origin存在,則進行比對

絕大部分的跨域都是這種簡單請求,只需要將設定 allow-origin為* 即可

預檢請求

1.請求以 get,head,post以外的方法發起;

2.使用post方法,但資料型別 不為x-www-form-urlencoded,form-data,text/plain;

3.使用了自定義請求頭

先傳送乙個 options請求到目標站點,查詢該請求是否安全,防止請求對目標站點的資料造成破壞

在整合其它廠商系統時,相同的配置,結果報了跨域問題

帶憑證的請求

1.攜帶了使用者cookie的請求

發出實際請求時,同時傳送cookie,並檢查響應頭中,是否指明 access-control-allowcredentials為true

設定了 origin為*後,瀏覽器依然報跨域問題 ,之後貌似可以強制設定為 星號,解決了該問題

文中內容整理自 陳木鑫老師的《spring security實戰》,此外,這本書的書名雖是 《***實戰》,但與一般的應用指導型的書有所不同,書中涉及的知識兼顧了廣度與深度,是學習springsecurity極佳的教程。

建議輔以原始碼食用,大補大補!!

CORS跨域解決方案

這裡說的js跨域是指通過js在不同的域之間進行資料傳輸或通訊,比如用ajax向乙個不同的域請求資料,或者通過js獲取頁面中不同域的框架中 iframe 的資料。只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域。cors允許瀏覽器向跨源伺服器,發出xmlhttprequest請求,從而克服了a...

跨域解決方案CORS

cors 需要瀏覽器和後端同時支援。ie 8 和 9 需要通過 xdomainrequest 來實現。瀏覽器會自動進行 cors 通訊,實現 cors 通訊的關鍵是後端。只要後端實現了 cors,就實現了跨域。服務端設定 access control allow origin 就可以開啟 cors。...

跨域解決方案CORS

js跨域請求 這裡說的js跨域是指通過js在不同的域之間進行資料傳輸或通訊,比如用ajax向乙個不同的域請求資料,或者通過js獲取頁面中不同域的框架中 iframe 的資料。只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域。一句話,說明白跨域 跨域,指的是瀏覽器不能執行其他 的指令碼。它是由...