跨域通信

跨域通信常用的幾種方式

1、JSONP

2筑累、WebSocket

3袱蜡、CORS

4、Hash

5慢宗、postMessage

1坪蚁、JSONP

  • JSONP的原理是什么?怎么實現(xiàn)的镜沽?
    JSONP的原理:通過<script>標簽的異步加載來實現(xiàn)的敏晤。可以通過<script>標簽的src缅茉,里面放url嘴脾,通過script標簽引入的js是不受同源策略的限制,得和后端訂好那個字段是回調(diào)函數(shù)

2. CORS

  • CORS 可以理解成是既可以同步、也可以異步*的Ajax译打。
    fetch 是一個比較新的API耗拓,用來實現(xiàn)CORS通信
 // url(必選),options(可選)
      fetch('/some/url/', {
          method: 'get',
      }).then(function (response) {  //類似于 ES6中的promise

      }).catch(function (err) {
        // 出錯了奏司,等價于 then 的第二個參數(shù)乔询,但這樣更好用更直觀
      });
  • “CORS為什么支持跨域的通信?”
    答案:跨域時韵洋,瀏覽器會攔截Ajax請求竿刁,并在http頭中加Origin。

3.postMessage

場景:窗口 A (http:A.com)向跨域的窗口 B (http:B.com)發(fā)送信息麻献。步驟如下们妥。
(1)在A窗口中操作如下:向B窗口發(fā)送數(shù)據(jù):

    // 窗口A(http:A.com)向跨域的窗口B(http:B.com)發(fā)送信息
    Bwindow.postMessage('data', 'http://B.com'); //這里強調(diào)的是B窗口里的window對象

(2)在B窗口中操作如下:

    // 在窗口B中監(jiān)聽 message 事件
    Awindow.addEventListener('message', function (event) {   //這里強調(diào)的是A窗口里的window對象
        console.log(event.origin);  //獲取 :url。這里指:http://A.com
        console.log(event.source);  //獲让阄恰:A window對象
        console.log(event.data);    //獲取傳過來的數(shù)據(jù)
    }, false);

4. WebSocket

首先Websocket是基于HTTP協(xié)議的监婶,或者說借用了HTTP的協(xié)議來完成一部分與后臺的握手。

//創(chuàng)建WebSocket的對象齿桃。參數(shù)可以是 ws 或 wss惑惶,后者表示加密。
var ws = new WebSocket("ws://localhost:9998/echo");

// 建立 webSocket 連接成功觸發(fā)事件
ws.onopen = function () {
  // 使用 send() 方法發(fā)送數(shù)據(jù)
  ws.send("發(fā)送數(shù)據(jù)");
  alert("數(shù)據(jù)發(fā)送中...");
};

// 接收服務(wù)端數(shù)據(jù)時觸發(fā)事件
ws.onmessage = function (evt) {
  var received_msg = evt.data;
  alert("數(shù)據(jù)已接收...");
  ws.close()
};

// 斷開 webSocket 連接成功觸發(fā)事件
ws.onclose = function () {
  alert("連接已關(guān)閉...");
};
  • 事件處理程序 描述
    ws .onopen 連接建立時觸發(fā)
    ws .onmessage 客戶端接收服務(wù)端數(shù)據(jù)時觸發(fā)
    ws .onerror 通信發(fā)生錯誤時觸發(fā)
    ws .onclose 連接關(guān)閉時觸發(fā)
  • 方法 描述
    ws .send() 使用連接發(fā)送數(shù)據(jù)
    ws .close() 關(guān)閉連接短纵,
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末带污,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子香到,更是在濱河造成了極大的恐慌鱼冀,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悠就,死亡現(xiàn)場離奇詭異千绪,居然都是意外死亡,警方通過查閱死者的電腦和手機梗脾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門荸型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炸茧,你說我怎么就攤上這事瑞妇。” “怎么了梭冠?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵辕狰,是天一觀的道長。 經(jīng)常有香客問我妈嘹,道長柳琢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮柬脸,結(jié)果婚禮上他去,老公的妹妹穿的比我還像新娘。我一直安慰自己倒堕,他們只是感情好灾测,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垦巴,像睡著了一般媳搪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骤宣,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天秦爆,我揣著相機與錄音,去河邊找鬼憔披。 笑死等限,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芬膝。 我是一名探鬼主播望门,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锰霜!你這毒婦竟也來了筹误?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤癣缅,失蹤者是張志新(化名)和其女友劉穎厨剪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體友存,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡丽惶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了爬立。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡万哪,死狀恐怖侠驯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奕巍,我是刑警寧澤吟策,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站的止,受9級特大地震影響檩坚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一匾委、第九天 我趴在偏房一處隱蔽的房頂上張望拖叙。 院中可真熱鬧,春花似錦赂乐、人聲如沸薯鳍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挖滤。三九已至,卻和暖如春浅役,著一層夾襖步出監(jiān)牢的瞬間斩松,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工觉既, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惧盹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓奋救,卻偏偏與公主長得像岭参,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尝艘,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一演侯、跨域and同源政策 1.跨域毡咏,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本烁兰。它是由瀏覽器的同源策略造成的系任,是瀏覽器對ja...
    Viaphlyn閱讀 412評論 2 1
  • 阮一峰同源策略瀏覽器處于安全考慮實行了同源策略機制呼巴。同源指的是 協(xié)議相同 域名相同 端口相同 舉例來說炫乓,http:...
    209bd3bc6844閱讀 420評論 0 0
  • 概述 JavaScript出于安全方面的考慮压鉴,不允許跨域調(diào)用其他頁面的對象柿汛。但在安全限制的同時也給注入iframe...
    npmstart閱讀 2,144評論 0 5
  • 概述 JavaScript出于安全方面的考慮胸嘴,不允許跨域調(diào)用其他頁面的對象盾戴。但在安全限制的同時也給注入iframe...
    簡葉一枚閱讀 1,660評論 0 3
  • 平時我們生活工作溝通對話都不怎么緊張寄锐,但是遇到做演講時總是很頭疼的一件事,例如向公司領(lǐng)導們匯報尖啡,工作總結(jié)演講或者個...
    心智升級之路閱讀 160評論 0 1