跨域問題常用4種方法解決方案

2022-05-04 01:39:13 字數 2185 閱讀 7632

跨域問題

1.jsonp:動態插入

script

標籤,通過

script

標籤引入乙個

js檔案,這個檔案載入成功之後會執行我們在

url引數中制定的函式,並且會把我們需要的

json

資料傳入

**實現

jquery方法

$.getjson("",function dosomething(jsondata))

jquery會自動生成乙個全域性函式來替換callback=?中的問號,之後獲取到資料後又會自動銷毀,實際上就是起乙個臨時**函式的作用。

$.getjson會自動判斷是否跨域,不跨域的話,就呼叫普通的ajax方法;跨域的話,則會以非同步載入js檔案的形式來呼叫jsonp的**函式。

getjson: function( url, data, callback )

2.window.name+iframe

iframe的

src屬性由外域轉向本地域,跨域資料即由

iframe

的window.name

從外域傳遞到本地域,巧妙的繞過了瀏覽器的跨域訪問限制,name 值在不同的頁面(甚至不同網域名稱)載入後依舊存在,並且可以支援非常長的

name

值(2mb

)。**實現:

把data.html頁面載入進來?

顯然我們不能直接在跨域1.html頁面中通過改變window.location來載入data.html頁面,

因為我們想要即使跨域1.html頁面不跳轉也能得到data.html裡的資料。

答案就是在跨域1.html頁面中使用乙個隱藏的iframe來充當乙個中間人角色,由iframe去獲取data.html的資料,然後跨域1.html再去得到iframe獲取到的資料。

充當中間人的iframe想要獲取到data.html的通過window.name設定的資料,只需要把這個iframe的src設為data.html就行了。然後跨域1.html想要得到iframe所獲取到的資料,也就是想要得到iframe的window.name的值,還必須把這個iframe的src設成跟跨域1.html頁面同乙個域才行,不然根據前面講的同源策略,跨域1.html是不能訪問到

iframe

裡的window.name

屬性的。這就是設定iframe的src='同目錄沒有用.html'的原因。

3.h5中的

postmessage

跨文件資訊傳輸

cross document messaging

**實現:

a.html

window.onload = function()

window.addeventlistener('message', function(e) );

b.html

window.addeventlistener('message', function(e) {

if(e.source != window.parent) {

return;

let data = e.data;

console.log('b.html 接收到的訊息

:', data);

parent.postmessage('我已經接收到訊息了

!', e.origin);

4.cors 是乙個

w3c

標準,全稱是

"跨域資源共享"(

cross-origin resource sharing

)它允許瀏覽器向跨源伺服器,發出

請求,從而克服了

ajax

只能同源使用的限制。

cors 需要瀏覽器和伺服器同時支援才可以生效,對於開發者來說,

cors

通訊與同源的

ajax

通訊沒有差別,**完全一樣。瀏覽器一旦發現

ajax

請求跨源,就會自動新增一些附加的頭資訊,有時還會多出一次附加的請求,但使用者不會有感覺。

因此,實現 cors 通訊的關鍵是伺服器。只要伺服器實現了

cors

介面,就可以跨源通訊。伺服器設定相應頭中的 access-control-allow-origin,瀏覽器允許跨域請求,需要瀏覽器支援h5,

該值要與請求頭中 origin一致才能生效,否則將跨域失敗。

跨域解決方案

因為瀏覽器出於安全考慮,有同源策略。也就是說,如果協議 網域名稱或者埠有乙個不同就是跨域,ajax 請求會失敗。那麼是出於什麼安全考慮才會引入這種機制呢?其實主要是用來防止 csrf 攻擊的。簡單點說,csrf 攻擊是利用使用者的登入態發起惡意請求。也就是說,沒有同源策略的情況下,a 可以被任意其他...

跨域解決方案

瀏覽器端的同源策略 如果兩個頁面的協議,埠和網域名稱中的其中任意乙個不相同,它們就是不同源的,瀏覽器會限制他們之間的資源互動 跨域 跨域的安全限制只針對瀏覽器,伺服器是沒有跨域的安全限制的 原理 由於伺服器沒有跨域限制,所以在需要跨域訪問時,在中間設定乙個中間層 舉例 192.168.10.1 80...

跨域解決方案

後端解決跨域的主要方式是,通過在響應頭中設定相關的跨域字段,用於告訴瀏覽器允許跨域請求資源。在前後端分離的場景中,登入頁面存在後端伺服器中,當登入成功後,需要發起跳轉請求,跳轉至前端首頁的情況。nginx響應頭相關配置 可指定匹配路徑,並不一定需要在location 下配置 在前後端分離的場景中,由...