ajax跨域原因整理

2021-08-29 14:06:44 字數 1763 閱讀 2112

1、瀏覽器限制;

2、跨域(協議、網域名稱,埠不一樣都是跨域,即違反同源策略);

3、xhr(xmlhttprequest請求);

同時滿足以上三個條件就會產生跨域。

在瀏覽器屬性裡加上 --disable-web-security --user-data-dir

不是乙個官方協議,是利用script標籤請求可以跨域來解決跨域問題(帶url/href的標籤都不會受同源策略的影響,eg:link、img、script等)。這個script建立完使用完就銷毀了,html裡不可見(可以通過對jq原始碼打斷點去檢視,大概在9800行)

jsonp的實現原理是:請求型別為script來避開跨域,前後臺約定帶有「callback」這個引數的請求就是jsonp請求,前台發出去的請求加了「callback」引數,當後台發現請求中帶「callback」時,後台就知道這是乙個jsonp請求,就會把返回的資料由json變成js**返回,js**內容就是乙個函式的呼叫,函式名是「callback」引數的值,而原來需要返回的json物件資料在這裡作為引數傳遞返回。後面的「_」表示不快取。

缺點:cros重點就在伺服器上,只要配置了允許cros,就可以正常傳送請求,非常方便且安全性好,具體的伺服器配置取決於服務端的不同實現。

瀏覽器發現請求是跨域的時候,會在請求頭上加上origin: 網域名稱,當請求返回時,就會檢查響應頭裡面有沒有允許跨域的資訊,沒有的話就報錯。

那麼我們只要在伺服器上加上如下**即可:

res.addheader("access-control-allow-origin ", "http://localhost:8081");//*代表所有域

access-control-allow-methods,"get" //*代表所有方法

當瀏覽器要傳送跨域請求時,如果是簡單請求,就是先執行後判斷,如果是複雜請求,瀏覽器會先傳送乙個options預檢命令即乙個options請求,當該請求通過時才會再傳送真正的請求。如下,傳送兩個請求

該option請求會根據請求的資訊去詢問服務端支不支援該請求。比如傳送的資料是json型別(通過content-type設定)的話,會攜帶乙個請求頭access-control-request-headers: content-type去詢問支不支援該資料型別,如果支援(res.addheader("access-control-allow-headers ", "content-type")),則請求就會通過,並傳送真正的請求

可以通過將預檢命令快取來減少請求

設定方法是服務端響應頭設定access-control-max-age,值是快取時間

前面設定響應頭access-control-allow-origin: *,可以解決跨域,但是在帶cookie的跨域請求中就不能試用了,origin必須是全匹配,而之前說了請求頭裡面會帶有origin,那我們把這個值獲取下,就可以做完全匹配了。此外帶cookie的跨域還需要在響應頭中設定access-control-allow-credentials的值為true

呼叫方修改apache或者nginx靜態伺服器,通過靜態伺服器隱藏呼叫請求返回給瀏覽器,在瀏覽器視角來看,還是同源訪問,自然也就不存在跨域的問題了。

其他方案:document.domain、window.name、location.hash、postmessage、websocket協議等(先記錄下~~~)

ajax跨域 原因原理解決

1.安全,跨域cookie iframe 2.很簡單,就是利用 並提供乙個 函式來接收資料 函式名可約定,或通過位址引數傳遞 第三方產生的響應為json資料的包裝 故稱之為jsonp,即json padding 形如 callback 這樣瀏覽器會呼叫callback函式,並傳遞解析後json物件作...

ajax跨域 ajax跨域學習總結(一)

網域名稱又稱網域 網域名稱,是由一串用點分隔的名字組成的internet上某一台計算機或計算機組的名稱,用於在資料傳輸時標識計算機的電子方位 有時也指地理位置 internet的核心服務dns domain name system,網域名稱系統,有時也簡稱為網域名稱 提供網域名稱到ip位址的相對映。...

ajax跨域與cookie跨域

ajax跨域取資料 利用可以跨域載入js的原理 functioncallback 這是需要返回這樣乙個js函式 ajax資料型別使用jsonp 如 ajax url callbask x datatype jsonp type get 在使用資料型別為jsonp時,jquery自動會在url路徑上拼...