JSONP_跨域

題目1: 什么是同源策略

所謂"同源"指的是"三個相同"欧芽。協(xié)議相同晕粪、域名相同、端口相同渐裸。
同源政策的目的,是為了保證用戶信息的安全装悲,防止惡意的網(wǎng)站竊取數(shù)據(jù)昏鹃。
設(shè)想這樣一種情況:A網(wǎng)站是一家銀行,用戶登錄以后诀诊,又去瀏覽其他網(wǎng)站洞渤。如果其他網(wǎng)站可以讀取A網(wǎng)站的 Cookie,會發(fā)生什么属瓣?
很顯然载迄,如果 Cookie 包含隱私(比如存款總額)讯柔,這些信息就會泄漏。更可怕的是护昧,Cookie 往往用來保存用戶的登錄狀態(tài)魂迄,如果用戶沒有退出登錄,其他網(wǎng)站就可以冒充用戶惋耙,為所欲為捣炬。因?yàn)闉g覽器同時還規(guī)定,提交表單不受同源政策的限制绽榛。
由此可見湿酸,"同源政策"是必需的,否則 Cookie 可以共享灭美,互聯(lián)網(wǎng)就毫無安全可言了推溃。

隨著互聯(lián)網(wǎng)的發(fā)展,"同源政策"越來越嚴(yán)格届腐。目前铁坎,如果非同源,共有三種行為受到限制梯捕。
(1) Cookie厢呵、LocalStorage 和 IndexDB 無法讀取。
(2) DOM 無法獲得傀顾。
(3) AJAX 請求不能發(fā)送襟铭。

題目2: 什么是跨域?跨域有幾種實(shí)現(xiàn)形式

跨域:從一個頁面去請求讀或者寫另一個頁面的資源短曾,突破同源策略的限制寒砖。
跨域的幾種方式:

  • 主域名相同,子域不同的嫉拐,如:child.a.html和a.html可通過設(shè)置document.domain = a.html達(dá)到降域的目的哩都,實(shí)現(xiàn)跨域訪問。問題:
    1婉徘、安全性漠嵌,當(dāng)一個站點(diǎn)(b.a.com)被攻擊后,另一個站點(diǎn)(c.a.com)會引起安全漏洞盖呼。
    2儒鹿、如果一個頁面中引入多個iframe,要想能夠操作所有iframe几晤,必須都得設(shè)置相同domain约炎。
  • JSONP(json with padding),只支持get請求,無法判斷請求是否失敗(不會返回各種HTTP狀態(tài)碼)圾浅,安全性不高掠手,假如提供jsonp的服務(wù)存在頁面注入漏洞,那么所有調(diào)用這個jsonp的網(wǎng)站都會存在漏洞狸捕。但它的兼容性很好喷鸽,在許多老版本瀏覽器上都可以運(yùn)行,不想XMLHttpRequest對象實(shí)現(xiàn)的Ajax請求那樣收到同源策略的限制府寒。
  • CORS (cross-origin-resource-sharing)
  • html5中新規(guī)定的window.postMessage來實(shí)現(xiàn)跨域魁衙。

題目3: JSONP 的原理是什么

原理是利用script標(biāo)簽的可跨域性,在網(wǎng)頁中動態(tài)的創(chuàng)建株搔,并添加script標(biāo)簽剖淀,請求需要訪問的頁面資源的url,服務(wù)器將數(shù)據(jù)放在一個知道指定名字的回調(diào)函數(shù)給傳回來纤房,由于網(wǎng)頁已經(jīng)定義的該函數(shù)纵隔,參數(shù)被返回后,便會立即執(zhí)行炮姨。

題目4: CORS是什么

CORS是一個W3C標(biāo)準(zhǔn)捌刮,全稱是"跨域資源共享"(Cross-origin resource sharing)。它允許瀏覽器向跨源服務(wù)器舒岸,發(fā)出XMLHttpRequest請求绅作,從而克服了AJAX只能同源使用的限制。CORS需要瀏覽器和服務(wù)器同時支持蛾派。目前俄认,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10洪乍。整個CORS通信過程眯杏,都是瀏覽器自動完成,不需要用戶參與壳澳。對于開發(fā)者來說岂贩,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣巷波。瀏覽器一旦發(fā)現(xiàn)AJAX請求跨源萎津,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求抹镊,但用戶不會有感覺姜性。因此,實(shí)現(xiàn)CORS通信的關(guān)鍵是服務(wù)器髓考。只要服務(wù)器實(shí)現(xiàn)了CORS接口,就可以跨源通信弃酌。CORS與JSONP的使用目的相同氨菇,但是比JSONP更強(qiáng)大儡炼。JSONP只支持GET請求,CORS支持所有類型的HTTP請求查蓉。JSONP的優(yōu)勢在于支持老式瀏覽器乌询,以及可以向不支持CORS的網(wǎng)站請求數(shù)據(jù)。

題目5: 根據(jù)視頻里的講解演示三種以上跨域的解決方式

  • 更改host文件
  • 使用JSONP解決跨域
    前端html中寫入JavaScript:
<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>Task31</title>
</head>
<body>
<h3>JSONP跨域</h3>
<script>
  window.jsonpFunction = function(data){
      console.log(data);
  }
  var script = document.createElement('script');
  script.src = "http://b.com/Ajax/advance13/advance13.php?callback=jsonpFunction";
  document.body.appendChild(script);
</script>
</body>
</html>

后端php

$message = "檢測接收";
jsonpFunction($message);
  • 使用CORS跨域
    前端html中寫入JavaScript:
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Task31</title>
</head>
<body>
<h1>演示跨域</h1>
<script src="jquery-1.11.1.js"></script>
<script>
    $.ajax({
        type: 'get',
        url: '//b.com/Ajax/advance13/advance13.php',
        dataType: 'text',
        success: function (data) {
            console.log(data);
        },
        error: function () {
            console.log('error');
        }
    });
</script>
</body>
</html>
  • 后端php
header("Access-Control-Allow-Origin: http://a.com");
$message = "檢測接收";
echo $message;
  • postmessage跨域
    在HTML5中新增了postMessage方法豌研,postMessage可以實(shí)現(xiàn)跨文檔消息傳輸(Cross Document Messaging)妹田,Internet Explorer 8, Firefox 3, Opera 9, Chrome 3和 Safari 4都支持postMessage。
    該方法可以通過綁定window的message事件來監(jiān)聽發(fā)送跨文檔消息傳輸內(nèi)容鹃共。
    使用postMessage實(shí)現(xiàn)跨域的話原理就類似于jsonp鬼佣,動態(tài)插入iframe標(biāo)簽,再從iframe里面拿回數(shù)據(jù)
    霜浴,作跨頁面通信更加適合.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晶衷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阴孟,更是在濱河造成了極大的恐慌晌纫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件永丝,死亡現(xiàn)場離奇詭異锹漱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)慕嚷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門哥牍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闯冷,你說我怎么就攤上這事砂心。” “怎么了蛇耀?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵辩诞,是天一觀的道長。 經(jīng)常有香客問我纺涤,道長译暂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任撩炊,我火速辦了婚禮外永,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拧咳。我一直安慰自己伯顶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祭衩,像睡著了一般灶体。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掐暮,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天蝎抽,我揣著相機(jī)與錄音,去河邊找鬼路克。 笑死樟结,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的精算。 我是一名探鬼主播瓢宦,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殖妇!你這毒婦竟也來了刁笙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤谦趣,失蹤者是張志新(化名)和其女友劉穎疲吸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體前鹅,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摘悴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舰绘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹂喻。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捂寿,靈堂內(nèi)的尸體忽然破棺而出口四,到底是詐尸還是另有隱情,我是刑警寧澤秦陋,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布蔓彩,位于F島的核電站,受9級特大地震影響驳概,放射性物質(zhì)發(fā)生泄漏赤嚼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一顺又、第九天 我趴在偏房一處隱蔽的房頂上張望更卒。 院中可真熱鬧,春花似錦稚照、人聲如沸蹂空。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽上枕。三九已至绳瘟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姿骏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工斤彼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留分瘦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓琉苇,卻偏偏與公主長得像嘲玫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子并扇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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

  • 什么是同源策略 同源政策(same-origin policy)是指同域名(或ip),同端口去团,同協(xié)議視為同一個域,...
    小囧兔閱讀 505評論 0 1
  • 1: 什么是同源策略 最初穷蛹,它的含義是指土陪,A網(wǎng)頁設(shè)置的 Cookie,B網(wǎng)頁不能打開肴熏,除非這兩個網(wǎng)頁"同源",所謂...
    好奇而已閱讀 300評論 0 0
  • 1.什么是同源策略瀏覽器出于安全方面的考慮鬼雀,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權(quán)的情況下蛙吏,不...
    24_Magic閱讀 496評論 0 0
  • 什么是同源策略 同源策略/SOP(Same origin policy)是一種約定源哩,由Netscape公司1995...
    YQY_苑閱讀 313評論 0 0
  • 一個人的時候 站在小樹林里 透過葉間斑駁 看螢火的軌跡 蝴蝶不懂你的傷心 不小心將月光灑落 碰碎了一湖漣漪 第四幅水彩
    辛安小閱讀 1,364評論 57 111