當乙個請求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...