當我們在www.a.com這個域下用ajax提交乙個請求到www.b.com這個域的時候,預設情況下,瀏覽器是不允許的,因為違反了瀏覽器的同源策略。解決方案可以參考筆者的這篇博文:
這裡要討論的是跨域中遇到的另乙個問題,就是當提交乙個請求到www.b.com這個域時,後台嘗試在響應中繫結cookie資訊,以告知瀏覽器去儲存這個cookie,但是預設情況下,瀏覽器是不會去為你建立cookie的,具體現象就是你發現在響應中已經有set-cookie的響應頭了並且有值,而且瀏覽器也會有資訊顯示已接收到cookie了,但是就是在cookie中找不到。沒錯,該現象就是因為你是跨域提交的建立cookie的請求。那麼如果我們非要瀏覽器去建立這個cookie怎麼辦呢?這裡就要使用到乙個xmlhttprequest物件的屬性xhrfields,官方文件的解釋如下:
a map of fieldname-fieldvalue pairs to set on the nativexhr
object. for example, you can use it to setwithcredentials
totrue
for cross-domain requests if needed.
意思就是該屬性是乙個用來配置xhr物件的鍵值對,比如你可以在跨域請求有需要的時候設定withcredentials:true
那麼withcredentials:true是什麼意思?
該屬性是告訴瀏覽器,1、允許建立來自不同域的cookie資訊;2、每次的跨域請求都允許帶上該cookie資訊
該配置項還需要後台的允許才有效,後台如果允許瀏覽器傳送帶憑據的請求,那麼會在響應頭中帶上"access-control-allow-credentials",值為"true"。
如果不加此響應頭,瀏覽器將獲取不到服務端的響應體。
好了,到此我們已經知道怎麼跨域建立cookies,並在每次的跨域請求中帶上cookies了,簡單的說就是前台要配置乙個ajax引數:xhrfields:,有的資料上說還要設定crossdomain:true,但是筆者測試好像不需要;後台要在響應頭中繫結"access-control-allow-credentials",值為"true"。
瀏覽器跨域
前端部分,簡單的封裝乙個promise版的ajax let myajax function headers else xhr.open method,path for let key,value of object.entries headers xhr.send body myajax heade...
瀏覽器跨域
同源策略 同源策略是乙個重要的安全策略,它用於限制乙個origin的文件或者它載入的指令碼如何能與另乙個源的資源進行互動。它能幫助阻隔惡意文件,減少可能被攻擊的媒介。協議 網域名稱 埠號 http伺服器,預設的埠號為80 tcp 木馬executor開放此埠 https securely trans...
瀏覽器設定跨域
由於專案前端使用8001埠,後端使用的8080埠,因此前端呼叫後端介面時需要跨域,在瀏覽器中需要設定跨域,否則會由於跨域安全性導致請求失敗。比如chrome中,需要新建乙個chrome瀏覽器的快捷方式,右鍵選擇屬性 新增 disable web security user data dir c ch...