JSONP_跨域

1偿乖、什么是同源策略

同源策略是瀏覽器出于安全性的考量而制定的策略矗钟,默認(rèn)情況下新症,XHR對(duì)象只能訪問(wèn)與包含它的頁(yè)面位于同一個(gè)域中的資源恳蹲,即限制了來(lái)自不同源的"document"或腳本對(duì)當(dāng)前"document"讀取或設(shè)置某些屬性虐块。
我們知道URL(document.URL)由協(xié)議(http/https/file/ftp)、域名(doucment.domain)嘉蕾、端口(port:3000/4000/80/8080)贺奠、還有路徑組成,如果兩個(gè)URL的協(xié)議错忱、域名儡率、端口(URL組成部分前3個(gè))相同,則表示他們同源以清。
a)a.b.com a.b.com/a.html 同源儿普,域相同。
b)b.com a.b.com 不同源掷倔,域不同眉孩。
c)a.b.com:8080 a.b.com/3000 不同源,端口不同今魔。
d)http://a.b.com https://a.b.com 不同源勺像,協(xié)議不同

2、 什么是跨域错森?跨域有幾種實(shí)現(xiàn)形式

跨域:跨域顧名思義就是突破同源策略的限制,去不同的域下訪問(wèn)數(shù)據(jù)篮洁。
實(shí)現(xiàn)形式:jsonp涩维、CORS:跨域資源共享(Cross-Origin Resource Sharing)、降域、postMessage()

3瓦阐、JSONP 的原理是什么

在html下引入script標(biāo)簽是可以請(qǐng)求不同源的數(shù)據(jù)蜗侈。那么也就是說(shuō)同源策略并沒有對(duì)script的src進(jìn)行監(jiān)測(cè),而且script的特性是在頁(yè)面加載時(shí)會(huì)訪問(wèn)script的src睡蟋,那么我們可以將這個(gè)src想象成一個(gè)簡(jiǎn)單的get請(qǐng)求踏幻,通過(guò)訪問(wèn)這個(gè)地址,我們可以配合后端對(duì)路由進(jìn)行參數(shù)配置戳杀,使這段訪問(wèn)的src中加入一些參數(shù)该面,從而靈活的從后端調(diào)取數(shù)據(jù)。我們甚至可以通過(guò)訪問(wèn)這個(gè)src來(lái)調(diào)用客戶端里存在的方法信卡,比如我們有一個(gè)function:

function jsonFn(param) { //do sth }

<script src='http://a.xx.com:3000/getSth?callback=jsonFn></script> 
//與前面的jsonFn對(duì)應(yīng)隔缀,注意先后順序以防報(bào)錯(cuò): jsonFn is not defined.

//server-side - routes 
app.get("/getSth", function(){
    let data = req.query.callback + '(param)' ;//提取問(wèn)號(hào)后callback鍵值對(duì)兒的值并加工成函數(shù)調(diào)用形式的字符串。
    res.send(data);
});

優(yōu)缺點(diǎn):
優(yōu)點(diǎn):它的兼容性更好傍菇,在更加古老的瀏覽器中都可以運(yùn)行猾瘸。
缺點(diǎn):它只支持GET請(qǐng)求而不支持POST等其它類型的HTTP請(qǐng)求。

4丢习、CORS是什么

CORS是一個(gè)W3C標(biāo)準(zhǔn)牵触,全稱是”跨域資源共享”(Cross-origin resource sharing)。它是一種AJAX跨域請(qǐng)求資源的方式咐低,對(duì)于開發(fā)者來(lái)說(shuō)荒吏,CORS通信與AJAX通信沒有差別。
它的實(shí)現(xiàn)方式很簡(jiǎn)單渊鞋,并且由瀏覽器自動(dòng)處理绰更,不需要做額外的工作。當(dāng)我們使用 XMLHttpRequest 發(fā)送請(qǐng)求時(shí)锡宋,假如瀏覽器發(fā)現(xiàn)請(qǐng)求不符合同源策略儡湾,就會(huì)給該請(qǐng)求加一個(gè)請(qǐng)求頭:Origin,后臺(tái)在處理時(shí)执俩,假如確定接收請(qǐng)求就會(huì)在返回結(jié)果中加一個(gè)響應(yīng)頭:Access-Control-Allow-Origin徐钠,再由瀏覽器自己判斷響應(yīng)頭中有沒有包含Origin的值,如果有瀏覽器就會(huì)處理響應(yīng)役首,我們就可以拿到數(shù)據(jù)尝丐,如果不包含瀏覽器就會(huì)拒絕,此時(shí)我們就無(wú)法拿到響應(yīng)數(shù)據(jù)衡奥。
優(yōu)缺點(diǎn):
優(yōu)點(diǎn):可以處理GET爹袁、POST等所有HTTP請(qǐng)求,不像JSONP那樣只支持GET請(qǐng)求矮固。使用時(shí)簡(jiǎn)單失息,只要服務(wù)器實(shí)現(xiàn)了CORS接口,就可以跨源通信。應(yīng)該說(shuō)CORS是最好的處理跨域的方式盹兢,它是跨域處理方案未來(lái)的趨勢(shì)邻梆。
缺點(diǎn):響應(yīng)的它的兼容性較差,IE瀏覽器不能低于IE10绎秒。

5浦妄、降域

與JSONP 和 CORS 不同,降域這種解決方案只適用于主域相同见芹,子域不同的用場(chǎng)景剂娄,一般主要用于頁(yè)面有 iframe 的情況。具體的原理很簡(jiǎn)單:兩個(gè)頁(yè)面都要通過(guò)JS來(lái)強(qiáng)制設(shè)置 document.domain 為基礎(chǔ)的主域辆童,就實(shí)現(xiàn)了降域跨域宜咒。

6、postMessage

postMessage()是HTML5引入的新API把鉴,主要被用來(lái)解決跨域和跨窗口消息傳遞等問(wèn)題故黑,它的應(yīng)用場(chǎng)景相對(duì)廣泛,可以被用于解決以下問(wèn)題:頁(yè)面和其打開的新窗口的數(shù)據(jù)傳遞庭砍、多窗口之間消息傳遞场晶、頁(yè)面與嵌套的iframe消息傳遞、上面三個(gè)問(wèn)題的跨域數(shù)據(jù)傳遞怠缸。

otherWindow.postMessage(message, targetOrigin, [transfer]);

我們通過(guò)給postMessage()方法設(shè)置參數(shù)來(lái)允許來(lái)自不同源的腳本采用異步方式進(jìn)行有限的通信诗轻,可以實(shí)現(xiàn)跨文本檔、多窗口揭北、跨域消息傳遞扳炬。postMessage有兩個(gè)參數(shù)。
message搔体,將要發(fā)送到其他 window的數(shù)據(jù)恨樟。
targetOrigin,通過(guò)窗口的origin屬性來(lái)指定哪些窗口能接收到消息事件疚俱,其值可以是字符串“*”(表示無(wú)限制)或者一個(gè)URI劝术。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呆奕,隨后出現(xiàn)的幾起案子养晋,更是在濱河造成了極大的恐慌,老刑警劉巖梁钾,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绳泉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡陈轿,警方通過(guò)查閱死者的電腦和手機(jī)圈纺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門秦忿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)麦射,“玉大人蛾娶,你說(shuō)我怎么就攤上這事∏鼻铮” “怎么了蛔琅?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)峻呛。 經(jīng)常有香客問(wèn)我罗售,道長(zhǎng),這世上最難降的妖魔是什么钩述? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任寨躁,我火速辦了婚禮,結(jié)果婚禮上牙勘,老公的妹妹穿的比我還像新娘职恳。我一直安慰自己,他們只是感情好方面,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布放钦。 她就那樣靜靜地躺著,像睡著了一般恭金。 火紅的嫁衣襯著肌膚如雪操禀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天横腿,我揣著相機(jī)與錄音颓屑,去河邊找鬼。 笑死耿焊,一個(gè)胖子當(dāng)著我的面吹牛揪惦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搀别,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼丹擎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了歇父?” 一聲冷哼從身側(cè)響起蒂培,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榜苫,沒想到半個(gè)月后护戳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垂睬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年媳荒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抗悍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钳枕,死狀恐怖缴渊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鱼炒,我是刑警寧澤衔沼,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站昔瞧,受9級(jí)特大地震影響指蚁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜自晰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一凝化、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酬荞,春花似錦搓劫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至牲剃,卻和暖如春遣疯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凿傅。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工缠犀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聪舒。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓辨液,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親箱残。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滔迈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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

  • 什么是同源策略 同源政策(same-origin policy)是指同域名(或ip),同端口,同協(xié)議視為同一個(gè)域被辑,...
    小囧兔閱讀 513評(píng)論 0 1
  • 1.什么是同源策略瀏覽器出于安全方面的考慮燎悍,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權(quán)的情況下盼理,不...
    24_Magic閱讀 497評(píng)論 0 0
  • 1: 什么是同源策略 最初谈山,它的含義是指,A網(wǎng)頁(yè)設(shè)置的 Cookie宏怔,B網(wǎng)頁(yè)不能打開奏路,除非這兩個(gè)網(wǎng)頁(yè)"同源",所謂...
    好奇而已閱讀 303評(píng)論 0 0
  • 題目1: 什么是同源策略 瀏覽器出于安全考慮畴椰,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權(quán)的情況下鸽粉,...
    saintkl閱讀 236評(píng)論 0 0
  • 文/你是這樣的Max 衰草連橫向晚晴 半城柳色半聲笛 枉將綠蠟作紅玉 滿座衣冠無(wú)相憶 時(shí)光 來(lái)復(fù)去 老舊唱機(jī)依舊在...
    你是這樣的Max閱讀 6,437評(píng)論 2 6