跨域 如何解決

2022-09-13 03:24:06 字數 2622 閱讀 8265

當乙個請求url的協議、網域名稱、埠三者之間任意乙個與當前的url不同即為跨域

ex:http//www.... 和https//www....就是協議上的跨域(http/https)

www.baidu.com 和www.test.com 就是主網域名稱不同(baidu/test)

www.test.com 和blog.test.com 就是子網域名稱不同(www/blog)

www.test.com:8080 和www.test.com:7000 埠上的跨域(8080/7000)

因為跨域的訪問會帶來許多安全性上的問題,cookie一般都用於狀態控制,儲存登入的資訊,如果允許跨域,那麼別的**用一段指令碼就可以輕鬆獲取你的cookie資料,並且冒充身份去登入**(這不一下就被盜號了嗎),存在極大的安全隱患,所以,現在的瀏覽器都採用同源策略
1.無法讀取非同源網頁的cookie、localstorage和indexeddb

2.無法接觸非同源網頁的dom節點

3.無法向非同源位址傳送ajax請求

注:有三個標籤允許跨域載入資源

1.2.3.其中 fn 是客戶端註冊的**的函式,目的獲取跨域伺服器上的json資料後,對資料進行在處理。

最後伺服器返回給客戶端資料的格式為:

fn()

3.cors

cors 是跨域資源分享(cross-origin resource sharing)的縮寫。它是 w3c 標準,屬於跨源 ajax 請求的根本解決方法。整個cors通訊過程都是瀏覽器自動完成的,不需要使用者參與,瀏覽器一旦發現ajax請求跨源,會自動新增一些附加的頭資訊,有時還會多出一次附加的請求,使用者不會有感覺,因此,實現cors通訊的關鍵是伺服器,只要伺服器實現了cors介面,就可以跨源通訊

優點:功能更加強大支援各種http method

缺點:相容性不如jsonp

使用:1.前端**(需要判斷瀏覽器是否支援情況)

function createcorsrequest(method, url) else if (typeof!= "undefined") else

return xhr;}

var xhr = createcorsrequest('get', url);

if (!xhr)

伺服器:

apache需要使用mod_headers模組來啟用http頭的設定,它預設是啟用的。你只需要在apache配置檔案的, , 或的配置裡加入以下內容即可

header set access-control-allow-origin *

4.跨文件通訊 api:window.postmessage()

呼叫postmessage方法實現父視窗向子視窗發訊息(子視窗同樣可以通過該方法傳送訊息給父視窗)

// 父視窗開啟乙個子視窗

var openwindow = window.open('', 'title');

// 父視窗向子視窗發訊息(第乙個引數代表傳送的內容,第二個引數代表接收訊息視窗的url)

openwindow.postmessage('nice to meet you!', '');

// 監聽 message 訊息

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

5.websocket

websocket是html5的乙個持久化的協議,它實現了瀏覽器與伺服器的全雙工通訊,同時也是跨域的一種解決方案。websocket和http都是應用層協議,都基於 tcp 協議。但是 websocket 是一種雙向通訊協議,在建立連線之後,websocket 的 server 與 client 都能主動向對方傳送或接收資料。同時,websocket 在建立連線時需要借助 http 協議,連線建立好了之後 client 與 server 之間的雙向通訊就與 http 無關了。

原生websocket api使用起來不太方便,我們使用socket.io,它很好地封裝了websocket介面,提供了更簡單、靈活的介面,也對不支援websocket的瀏覽器提供了向下相容。

1.前端**

user input:

2.nodejs socket後台:

// 啟http服務

// 監聽socket連線

socket.listen(server).on('connection', function (client) );

// 斷開處理

client.on('disconnect', function () );

});

如何解決跨域問題

1 什麼是跨域?2 跨域請求資源的方法 解決跨域的方法 1 porxy 反向 定義和用法 proxy 用於將請求傳送給後台伺服器,通過伺服器來傳送請求,然後將請求的結果傳遞給前端。實現方法 通過nginx 注意點 1 如果你 的是https協議的請求,那麼你的proxy首先需要信任該證書 尤其是自定...

如何解決跨域問題?

跨域問題可以使用一下幾種方法解決 jsonp解決 jsonp和ajax一樣,是一門技術,缺點是get方式長度限制不能拼太多東西,大概2kb 前端偏好 或者iframe解決 操作簡單 或者h5新增了window.postmessage方法可以實現跨域通訊 相容不好 還能修改document.domai...

如何解決跨域問題

1.jsonp跨域 前端 json返回的是一串資料,而jsonp返回的是指令碼 jsonp只支援get請求,不支援post請求 2.nginx反向 後端 www.baidu index.html需要呼叫www.sina.com server.php,可以寫乙個介面www.baidu.com serv...