同源策略禾唁、跨域效览、jsonp

一、問答題

1. 什么是同源策略

(1)含義:1995年荡短,同源政策由 Netscape 公司引入瀏覽器丐枉。目前,所有瀏覽器都實行這個政策肢预。
最初矛洞,它的含義是指,A網(wǎng)頁設(shè)置的 Cookie烫映,B網(wǎng)頁不能打開沼本,除非這兩個網(wǎng)頁“同源”。所謂“同源”指的是”三個相同“锭沟。

1.協(xié)議相同
2.域名相同
3.端口相同

(2)目的:同源政策的目的抽兆,是為了保證用戶信息的安全,防止惡意的網(wǎng)站竊取數(shù)據(jù)族淮。
(3)限制范圍:隨著互聯(lián)網(wǎng)的發(fā)展辫红,“同源政策”越來越嚴(yán)格。目前祝辣,如果非同源贴妻,共有三種行為受到限制。

1.Cookie蝙斜、LocalStorage 和 IndexedDB 無法讀取名惩。
2.DOM 無法獲得。
3.AJAX 請求不能發(fā)送孕荠。

2. 什么是跨域娩鹉?跨域有幾種實現(xiàn)形式

(1)神馬是跨域(Cross Domain)?
說白點就是post、get的url不是你當(dāng)前的網(wǎng)站稚伍,域名不同弯予。例如在aaa.com/a.html里面,表單的提交action是bbb.com/b.html个曙。
不僅如此锈嫩,www.aaa.comaaa.com之間也屬于跨域,因為www.aaa.com是二級域名,aaa.com是根域名呼寸。
JavaScript出于安全方面的考慮那槽,是不允許跨域調(diào)用其他頁面的對象的(同源策略 Same-Origin Policy)。

![Uploading 20111112120822363_491068.gif . . .]
20111112120822363.gif

關(guān)于JavaScript能否跨域通信的詳細說明等舔,見下表:
http://www.a.com/a.js訪問以下URL的結(jié)果

URL 說明 是否允許通信
http://www.a.com/b.js 同一域名下 允許
http://www.a.com/script/b.js 同一域名下不同文件 允許
http://www.a.com:8000/b.js 同一域名,不同端口 不允許
https://www.a.com/b.js 同一域名糟趾,不同協(xié)議 不允許
http://70.32.92.74/b.js 域名和域名對應(yīng)IP 不允許
http://script.a.com/b.js 主域相同子域不同 不允許
http://a.com/b.js 同一域名慌植,不同二級域名 不允許
http://www.b.com/b.js 不同域名 不允許

(2)跨域的實現(xiàn)形式

  • JSONP:JSONP (JSON with Padding)是一個簡單高效的跨域方式,html中的script標(biāo)簽可以加載并執(zhí)行其他域的JavaScript义郑,于是我們可以通過script標(biāo)記來動態(tài)加載其他域的資源蝶柿。例如我要從域A的頁面pageA加載域B的數(shù)據(jù),那么在域B的頁面pageB中我以JavaScript的形式聲明pageA需要的數(shù)據(jù)非驮,然后在pageA中用script標(biāo)簽把pageB加載進來交汤,那么pageB中的腳本就會得以執(zhí)行。JSONP在此基礎(chǔ)上加入了回調(diào)函數(shù)劫笙,pageB加載完之后會執(zhí)行pageA中定義的函數(shù)芙扎,所需要的數(shù)據(jù)會以參數(shù)的形式傳遞給該函數(shù)。JSONP易于實現(xiàn)填大,但是也會存在一些安全隱患戒洼,如果第三方的腳本隨意地執(zhí)行,那么它就可以篡改頁面內(nèi)容允华,截獲敏感數(shù)據(jù)圈浇。但是在受信任的雙方傳遞數(shù)據(jù),JSONP是非常合適的選擇靴寂。

  • window.name:window對象的name屬性是一個很特別的屬性磷蜀,當(dāng)該window的location變化,然后重新加載百炬,它的name屬性可以依然保持不變褐隆。那么我們可以在頁面A中用iframe加載其他域的頁面B,而頁面B中用JavaScript把需要傳遞的數(shù)據(jù)賦值給window.name收壕,iframe加載完成之后妓灌,頁面A修改iframe的地址,將其變成同域的一個地址蜜宪,然后就可以讀出window.name的值了虫埂。這個方式非常適合單向的數(shù)據(jù)請求,而且協(xié)議簡單圃验、安全掉伏。不會像JSONP那樣不做限制地執(zhí)行外部腳本。

  • document.domain:通過修改document的domain屬性,我們可以在域和子域或者不同的子域之間通信斧散。同域策略認(rèn)為域和子域隸屬于不同的域供常,比如www.a.comsub.a.com是不同的域,這時鸡捐,我們無法在www.a.com下的頁面中調(diào)用sub.a.com中定義的JavaScript方法栈暇。但是當(dāng)我們把它們document的domain屬性都修改為a.com,瀏覽器就會認(rèn)為它們處于同一個域下箍镜,那么我們就可以互相調(diào)用對方的method來通信了源祈。

  • window.postMessage:window.postMessage是html5定義的一個很新的方法,這個方法可以很方便地跨window通信色迂。由于它是一個很新的方法香缺,所以在很舊和比較舊的瀏覽器中都無法使用。

  • CORS:CORS需要瀏覽器和服務(wù)器同時支持歇僧。目前图张,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10诈悍。
    整個CORS通信過程祸轮,都是瀏覽器自動完成,不需要用戶參與侥钳。對于開發(fā)者來說倔撞,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣慕趴。瀏覽器一旦發(fā)現(xiàn)AJAX請求跨源痪蝇,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求冕房,但用戶不會有感覺躏啰。
    因此,實現(xiàn)CORS通信的關(guān)鍵是服務(wù)器耙册。只要服務(wù)器實現(xiàn)了CORS接口给僵,就可以跨源通信。

3. jsonp 的原理是什么

  • 原理:
    1详拙、瀏覽器的同源策略把跨域請求都禁止了帝际;
    2、HTML的<script>標(biāo)簽是例外饶辙,可以突破同源策略從其他來源獲取數(shù)據(jù)蹲诀;
    3、由上可得弃揽,我們可以通過動態(tài)創(chuàng)建<script>標(biāo)簽引入jsonp文件脯爪,然后通過一系列JS操作獲取數(shù)據(jù)则北。

  • JSONP所存在的問題:

    • 使用遠程網(wǎng)站的script標(biāo)簽時,若遠程網(wǎng)站的script標(biāo)簽本身存在著漏洞痕慢,則引入的網(wǎng)站也會被影響尚揣,跨域的網(wǎng)站需要相互驗證,并設(shè)置token掖举。來保證安全性快骗。
    • 基于script標(biāo)簽的資源能能get數(shù)據(jù),不能post數(shù)據(jù)塔次,也就是說滨巴,只能讀,不具有寫的功能俺叭。
    • callback可能被注入一些惡意字符,可采用正則過濾的方式來消除這種錯誤泰偿。

4. CORS是什么

它的全稱叫做Cross-Origin Resource Sharing熄守,也就是跨域資源共享的意思,它是一種W3C規(guī)范耗跛,允許從瀏覽器的跨域通信裕照。通過建立XMLHttpRequest對象的header,CORS允許開發(fā)者使用相同的習(xí)慣作為跨域請求工作调塌。Chrome晋南、Firefox、Opera和Safari都是用XMLHttpRequest2中的對象羔砾,而IE則使用類似的XDomainRequest负间。
具體使用方法:在要被請求的文件中聲明header(“Access-Control-Allow-Origin: example.org”)即可
在IE10及以下,CORS都具有兼容性問題姜凄。

二政溃、實操題

1.降域

11.png
12.png

2.CORS

http://www.a.wayne.com:8080/loadmore.html 中加載 'http://www.b.wayne.com:8080/loadMore.php'

cors.png

在php文件加了header("Access-Control-Allow-Origin: http://www.a.wayne.com:8080");

微信截圖_20161027175329.png

3.JSONP

a.wayne.com:8080/demo2.html 中加載 b.wayne.com:8080/data.js


jsonp1.png
jsonp2.png
jsonp3.png

版權(quán)聲明:本教程版權(quán)歸饑人谷和作者(我)所有,轉(zhuǎn)載須說明來源态秧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末董虱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子申鱼,更是在濱河造成了極大的恐慌愤诱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捐友,死亡現(xiàn)場離奇詭異淫半,居然都是意外死亡,警方通過查閱死者的電腦和手機匣砖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門撮慨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竿痰,“玉大人,你說我怎么就攤上這事砌溺∮吧妫” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵规伐,是天一觀的道長蟹倾。 經(jīng)常有香客問我,道長猖闪,這世上最難降的妖魔是什么鲜棠? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮培慌,結(jié)果婚禮上豁陆,老公的妹妹穿的比我還像新娘。我一直安慰自己吵护,他們只是感情好盒音,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馅而,像睡著了一般祥诽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓮恭,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天雄坪,我揣著相機與錄音,去河邊找鬼屯蹦。 笑死维哈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的登澜。 我是一名探鬼主播笨农,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帖渠!你這毒婦竟也來了谒亦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤空郊,失蹤者是張志新(化名)和其女友劉穎份招,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狞甚,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡锁摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哼审。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谐腰。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡孕豹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出十气,到底是詐尸還是另有隱情励背,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布砸西,位于F島的核電站叶眉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芹枷。R本人自食惡果不足惜衅疙,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸳慈。 院中可真熱鬧饱溢,春花似錦、人聲如沸走芋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绿聘。三九已至,卻和暖如春次舌,著一層夾襖步出監(jiān)牢的瞬間熄攘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工彼念, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挪圾,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓逐沙,卻偏偏與公主長得像哲思,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吩案,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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