網(wǎng)絡(luò)03 同源策略、跨域訪問(wèn)(jsonp隐圾、iframe)

1伍掀、同源策略:其是瀏覽器中很重要的一種安全策略,所謂同源:協(xié)議暇藏、域名蜜笤、端口號(hào)相同,瀏覽器端才能成功獲取到服務(wù)器端資源盐碱,不同源的客戶端腳本(javaScript/ActionScript)在沒明確授權(quán)的情況下瘩例,不能讀寫對(duì)方的資源;【同源策略的核心:并非當(dāng)發(fā)送請(qǐng)求的時(shí)候甸各,瀏覽器查看URL與服務(wù)器端是否遵守同源來(lái)判斷垛贤,而是當(dāng)你發(fā)送請(qǐng)求到服務(wù)器端,請(qǐng)求到資源后返回客戶端的時(shí)候趣倾,瀏覽器開始判斷聘惦,若是不符合同源策略,其就會(huì)報(bào)錯(cuò)】

(1).Ajax受瀏覽器同源策略的限制,所以網(wǎng)絡(luò)02中測(cè)試Ajax善绎,用http://localhost/index.html;訪問(wèn) http://localhost/getNews.php;

(2).http://www.example.com/page.html;? http://example.com/page.html;?這兩個(gè)并不一定是同一地址黔漂,服務(wù)器端并不一定配置了別名,所以訪問(wèn)服務(wù)器資源的過(guò)程中,不一定能互相訪問(wèn)禀酱;www.baidu.com的別名是baidu.com炬守,兩個(gè)都可以成功訪問(wèn)服務(wù)器端資源;

2剂跟、跨域訪問(wèn)解決方案:[除了Flash减途,其他都很常用]

(1).Flash:其是一種插件,目前幾乎沒人再使用了曹洽;

(2).服務(wù)器代理中轉(zhuǎn):設(shè)置服務(wù)器代理成功跨域鳍置,瀏覽器訪問(wèn)服務(wù)器有同源策略限制,但服務(wù)器之間可以直接傳輸數(shù)據(jù)送淆,沒有同源策略税产,http://localhost/index.html 想訪問(wèn)http://www.baidu.com,可做服務(wù)器代理http://localhost/,?客戶端直接訪問(wèn)即可偷崩;

服務(wù)器端localhost先向www.baidu.com獲取數(shù)據(jù)后辟拷,客戶端再訪問(wèn)localhost即可??

(3).jsonp跨域:jsonp最初是jQuery提出的跨域方案,慢慢才在原生中使用阐斜,巧妙利用了script標(biāo)簽的src屬性,img的src屬性也是如此呀狼,但iframe框架即使有src屬性也遵循同源策略萨蚕,跨域有其他方式试幽;

(4).document.domain:其針對(duì)基礎(chǔ)域名相同的情況综苔,document.domain = baidu.com;//設(shè)置基礎(chǔ)域名相同即可;?其下的子域名可以進(jìn)行跨域訪問(wèn)扛伍,zhidao.baidu.com; wenku.baidu.com等可互相訪問(wèn)岛琼;應(yīng)用場(chǎng)景:例如兩個(gè)網(wǎng)址都是未登錄狀態(tài)床三,登錄百度文庫(kù)后酥泛,再進(jìn)入百度的其他網(wǎng)頁(yè)惕澎,該網(wǎng)頁(yè)也是登錄狀態(tài)莉测,底層還涉及cookie的知識(shí);

(5).CORS(跨域資源共享):access-control-allow-origin:允許特定域名訪問(wèn)唧喉,后臺(tái)響應(yīng)頭中設(shè)置捣卤,access-control-allow-origin: *;//表示允許所有域名訪問(wèn)(白名單);//側(cè)面證明同源策略的核心是當(dāng)客戶端請(qǐng)求到數(shù)據(jù)返回客戶端的時(shí)候,瀏覽器會(huì)進(jìn)行判斷八孝,若是不符合同源董朝,其會(huì)報(bào)錯(cuò);? ? ? ? ? ? ? ? ? 【當(dāng)使用XMLHttpRequest發(fā)送請(qǐng)求時(shí)干跛,瀏覽器如果發(fā)現(xiàn)違反了同源策略就會(huì)自動(dòng)加上一個(gè)請(qǐng)求頭:origin,后端在接受到請(qǐng)求后確定響應(yīng)后會(huì)在Response Headers中加入一個(gè)屬性:Access-Control-Allow-Origin,值就是發(fā)起請(qǐng)求的源地址子姜,瀏覽器得到響應(yīng)會(huì)進(jìn)行判斷Access-Control-Allow-Origin的值是否和當(dāng)前的地址相同,只有匹配成功后才進(jìn)行響應(yīng)處理÷ト耄現(xiàn)代瀏覽器中和移動(dòng)端都支持cors哥捕,IE8以上】

(6).iframe框架:子窗口拿父級(jí)元素:location.hash;?父窗口拿子級(jí)元素:window.name; H5中的postMessage;以及websocket配合iframe跨域操作

3牧抽、jsonp跨域:瀏覽器的同源策略中<script>元素是個(gè)例外,其通過(guò)src屬性可以動(dòng)態(tài)引入json數(shù)據(jù)卻不受同源策略的影響遥赚,其是JSON的一種"使用模式"[ json with padding:?json外加了包裹層 ]

(1).可理解為src屬性不受同源策略限制扬舒,之前使用img圖片的時(shí)候src直接引入網(wǎng)絡(luò)上圖片的地址便可使用,以及script引入各種庫(kù)文件凫佛,按道理說(shuō)都是不同源的讲坎,但依舊可獲取資源,底層原理便是src

(2).jsonp的應(yīng)用場(chǎng)景多為制作搜索框御蒲,jsonp不僅可以做GET請(qǐng)求衣赶,也可以做POST請(qǐng)求,同ajax類似厚满,只不過(guò)它們更聚焦到GET請(qǐng)求

(3).使用jsonp的過(guò)程中:動(dòng)態(tài)創(chuàng)建script標(biāo)簽府瞄,引入資源,用完銷毀最佳~? (聚焦點(diǎn):引入數(shù)據(jù));

(4).封裝jsonp;(demo:百度搜索框~)

4碘箍、iframe框架:在當(dāng)前頁(yè)面嵌入另一個(gè)網(wǎng)頁(yè)遵馆,嵌入的網(wǎng)頁(yè)有獨(dú)立的document文檔結(jié)構(gòu);

(1).應(yīng)用場(chǎng)景:廣告頁(yè)面(不用更改本頁(yè)面結(jié)構(gòu))丰榴,在線編輯器货邓,導(dǎo)航欄tab切換(首尾部相同,只改變中間頁(yè)面四濒,引入不同的iframe框架即可换况,較古老的做法),以及一些登錄注冊(cè)頁(yè)面(大公司都使用最新的單頁(yè)面應(yīng)用[用戶體驗(yàn)感好]盗蟆,小公司還在使用);[目前QQ郵箱登錄注冊(cè)框也不再使用iframe]

(2).iframe框架的缺點(diǎn):window.onload事件在整個(gè)文檔頁(yè)面全部加載完成后執(zhí)行戈二,過(guò)多嵌入iframe框架會(huì)阻塞頁(yè)面加載 ->解決方案:動(dòng)態(tài)加載iframe框架

(3).<iframe src=""></iframe>;//iframe框架即使有src屬性,其也是嚴(yán)格遵循同源策略喳资,同源下才能互相訪問(wèn)變量觉吭,方法等;(測(cè)試過(guò)程中必須在wampserver/www文件夾下仆邓,如果直接打開鲜滩,其是file協(xié)議,本地協(xié)議又沒有域名节值,端口號(hào)徙硅,所以沒法談同源策略,同源策略是發(fā)送網(wǎng)絡(luò)請(qǐng)求過(guò)程中)

- - - >>>?同源策略下父子窗口元素互相訪問(wèn):使用window.parent;/ ifr.contentWidow

- - - >>>(非同源)跨域父子窗口元素訪問(wèn):子窗口訪問(wèn)父窗口元素:location.hash;? 父窗口訪問(wèn)子窗口元素:window.name;

[1].父窗口

[2].子窗口

H5中的新方法:postMessage; websocket;//websocket:(其也是一種協(xié)議類似http,解決http不能讓服務(wù)器主動(dòng)發(fā)出數(shù)據(jù)的問(wèn)題搞疗,其也是TCP闷游、ip協(xié)議建立連接,但建立連接后不會(huì)斷開,每當(dāng)服務(wù)器數(shù)據(jù)有變化的時(shí)候脐往,其就發(fā)送個(gè)服務(wù)器端)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末休吠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子业簿,更是在濱河造成了極大的恐慌瘤礁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梅尤,死亡現(xiàn)場(chǎng)離奇詭異柜思,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)巷燥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門赡盘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人缰揪,你說(shuō)我怎么就攤上這事陨享。” “怎么了钝腺?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵抛姑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我艳狐,道長(zhǎng)定硝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任毫目,我火速辦了婚禮蔬啡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘镀虐。我一直安慰自己箱蟆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布粉私。 她就那樣靜靜地躺著,像睡著了一般近零。 火紅的嫁衣襯著肌膚如雪诺核。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天久信,我揣著相機(jī)與錄音窖杀,去河邊找鬼。 笑死裙士,一個(gè)胖子當(dāng)著我的面吹牛入客,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼桌硫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼夭咬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起铆隘,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卓舵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后膀钠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掏湾,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年肿嘲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了融击。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雳窟,死狀恐怖尊浪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涩拙,我是刑警寧澤际长,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站兴泥,受9級(jí)特大地震影響工育,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搓彻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一如绸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旭贬,春花似錦怔接、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奋刽,卻和暖如春瓦侮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佣谐。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工肚吏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狭魂。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓罚攀,卻偏偏與公主長(zhǎng)得像党觅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斋泄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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

  • 題目1.什么是同源策略? 同源策略(Same origin Policy): 瀏覽器出于安全方面的考慮杯瞻,只允許與本...
    FLYSASA閱讀 1,724評(píng)論 0 6
  • 一:什么是同源策略 同源策略是瀏覽器上為安全性考慮實(shí)施的非常重要的安全策略。 同源:URL由協(xié)議是己、域名又兵、端口和路徑...
    南方小小姑娘閱讀 754評(píng)論 0 1
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本卒废。它是由瀏覽器的同源策略造成的沛厨,是瀏覽器對(duì)JavaScript實(shí)...
    Yaoxue9閱讀 1,301評(píng)論 0 6
  • Section1、為什么要跨域摔认? 自古以來(lái)(1995年起)逆皮,為了用戶的信息安全,瀏覽器就引入了同源策略参袱。那么同源策...
    不去解釋閱讀 553評(píng)論 0 0
  • 什么是跨域 跨域电谣,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的抹蚀,是瀏覽器對(duì)JavaScript實(shí)...
    他方l閱讀 1,064評(píng)論 0 2