跨域問題持續(xù)更新...

先說定義,什么是跨域

? ? 對(duì)于瀏覽器而言,只要訪問域名憔四、協(xié)議、端口中任何一個(gè)不同就會(huì)引發(fā)同源策略般眉。

? ? 同源策略就是為了保護(hù)用戶安全了赵,防止不同域JS交互:

? ? ? ?1限制cookie 、localStorage 甸赃、indexDB 的讀仁裂础;

? ? ? ? 2無(wú)法獲取DOM信息埠对;

? ? ? ? 3Ajax請(qǐng)求無(wú)法發(fā)送络断。

如何解決跨域問題

? ? 1.CORS (跨域資源共享) -- Cross-Origin-Resource-Sharing

? ? 原理:使用自定義的HTTP頭讓瀏覽器和服務(wù)器進(jìn)行溝通,來判斷請(qǐng)求或者相應(yīng)是否成功项玛;

? ? 所以只有在被請(qǐng)求的Reponse header 中加入如下設(shè)置即可實(shí)現(xiàn)跨域訪問:

? ? ”Access-Control-Allow-Origin:*“??//指定允許其他域名訪問

? ? "Access-Control-Allow-Methods:GET,POST"? //響應(yīng)類型

? ? ”Access-Control-Allow-Header:x-requested-with,content-type“ //響應(yīng)頭設(shè)置

? ? 2.通過Jsonp跨域 - Json with Padding(填充式j(luò)son)的簡(jiǎn)寫

????JSONP的原理:通過script標(biāo)簽引入一個(gè)js文件貌笨,這個(gè)js文件載入成功后會(huì)執(zhí)行我們?cè)趗rl參數(shù)中指定的函數(shù),并且會(huì)把我們需要的json數(shù)據(jù)作為參數(shù)傳入襟沮。所以jsonp是需要服務(wù)器端的頁(yè)面進(jìn)行相應(yīng)的配合的锥惋。(即用JavaScript動(dòng)態(tài)加載一個(gè)script文件昌腰,同時(shí)定義一個(gè)callback函數(shù)給script執(zhí)行而已。)

????在js中膀跌,我們直接用XMLHttpRequest請(qǐng)求不同域上的數(shù)據(jù)時(shí)遭商,是不可以的。但是捅伤,在頁(yè)面上引入不同域上的js腳本文件卻是可以的劫流,jsonp正是利用這個(gè)特性來實(shí)現(xiàn)的。

? ? 3.使用HTML5的window.postMessage方法跨域

? ? HTML5引入了一個(gè)新的API:跨文檔通信API(Cross-document-message)

? ? 這個(gè)API里有個(gè)叫window.postMessage方法暑认,看名字顯而易見了困介,允許瀏覽器跨窗口通信,不論這兩個(gè)窗口是否同源蘸际。很牛逼白ā!

? ? 例如:a.html 向 b.html 發(fā)送數(shù)據(jù)粮彤,調(diào)用postMessage方法:

????a頁(yè)面:

????```

? ? <iframe id="frame1" src="http://127.0.0.1/JSONP/b.html" frameborder="1"></iframe>

????document.getElementById('frame1').onload = function(){

? ? var win = document.getElementById('frame1').contentWindow;

? ? win.postMessage("我是來自a頁(yè)面的","http://127.0.0.1/JSONP/b.html")

????}

????```

? ? b頁(yè)面:

? ??```

? ??window.onmessage =function(e){

? ? e = e || event;

????console.log(e.data);//我是來自a頁(yè)面的

????}

????```

????子窗口向父窗口發(fā)送消息的寫法類似根穷。

? ? ```

????window.opener.postMessage('我是來自b頁(yè)面的','http://a.com');?//父窗口和子窗口都可以通過message事件,監(jiān)聽對(duì)方的消息导坟。

? ? ```

????通過window.postMessage屿良,讀寫其他窗口的 LocalStorage 也成為了可能。?

????下面是一個(gè)例子惫周,主窗口寫入iframe子窗口的localStorage尘惧。?

????父窗口發(fā)送消息代碼:

? ? ```

????var win = document.getElementsByTagName('iframe')[0].contentWindow;

????var obj = { name: 'Jack' };

????// 存入對(duì)象

????win.postMessage(JSON.stringify({key: 'storage', method: 'set', data: obj}), 'http://b.com');

????// 讀取對(duì)象

????win.postMessage(JSON.stringify({key: 'storage', method: "get"}), "*");

????window.onmessage = function(e) {

????? if (e.origin != 'http://a.com') return;

? ????// "Jack"

????? console.log(JSON.parse(e.data).name);

????};

?```

子窗口接收消息的代碼:

```

window.onmessage = function(e) {

? if (e.origin !== 'http://bbb.com') return;

? var payload = JSON.parse(e.data);

? switch (payload.method) {

? ? case 'set':

? ? ? localStorage.setItem(payload.key, JSON.stringify(payload.data));

? ? ? break;

? ? case 'get':

? ? ? var parent = window.parent;

? ? ? var data = localStorage.getItem(payload.key);

? ? ? parent.postMessage(data, 'http://aaa.com');

? ? ? break;

? ? case 'remove':

? ? ? localStorage.removeItem(payload.key);

? ? ? break;

? }

};

```

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市递递,隨后出現(xiàn)的幾起案子喷橙,更是在濱河造成了極大的恐慌,老刑警劉巖登舞,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贰逾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡菠秒,警方通過查閱死者的電腦和手機(jī)疙剑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來践叠,“玉大人言缤,你說我怎么就攤上這事〗臀酰” “怎么了轧简?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)匾二。 經(jīng)常有香客問我哮独,道長(zhǎng)拳芙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任皮璧,我火速辦了婚禮舟扎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悴务。我一直安慰自己睹限,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布讯檐。 她就那樣靜靜地躺著羡疗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪别洪。 梳的紋絲不亂的頭發(fā)上叨恨,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音挖垛,去河邊找鬼痒钝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痢毒,可吹牛的內(nèi)容都是我干的送矩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼哪替,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼栋荸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凭舶,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒸其,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后库快,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钥顽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年义屏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜂大。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闽铐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奶浦,到底是詐尸還是另有隱情兄墅,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布澳叉,位于F島的核電站隙咸,受9級(jí)特大地震影響沐悦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜五督,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一藏否、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧充包,春花似錦副签、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至家浇,卻和暖如春本砰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓝谨。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工灌具, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人譬巫。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓咖楣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親芦昔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诱贿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 原文來自:http://www.ruanyifeng.com/blog/2016/04/same-origin-p...
    神秘者007閱讀 1,031評(píng)論 0 1
  • 一、概述 1.1 含義 1995年咕缎,同源政策由 Netscape 公司引入瀏覽器珠十。目前,所有瀏覽器都實(shí)行這個(gè)政策凭豪。...
    會(huì)飛的賊er閱讀 436評(píng)論 0 2
  • 瀏覽器安全的基石是"同源政策"(same-origin policy)焙蹭。很多開發(fā)者都知道這一點(diǎn),但了解得不全面嫂伞。 ...
    大海_9052閱讀 169評(píng)論 0 0
  • 本來想自己寫的孔厉,但是看了阮一峰大神的這篇文章,帖努,頓時(shí)就沒脾氣了撰豺。。轉(zhuǎn)載自阮一峰大神的《瀏覽器同源政策及其規(guī)避方法》...
    潘千千閱讀 262評(píng)論 0 0
  • 1.1 含義 1995年拼余,同源政策由 Netscape 公司引入瀏覽器污桦。目前,所有瀏覽器都實(shí)行這個(gè)政策匙监。 最初凡橱,它...
    孤君蓑笠翁閱讀 1,780評(píng)論 0 2