關(guān)于同源策略

同源策略

同源策略是一種約定舔庶,是由Netscape提出的著名安全策略抛蚁。他是瀏覽器最核心、最基本的安全功能惕橙。

同源的定義

如果兩個(gè)頁(yè)面的協(xié)議瞧甩、端口、主機(jī)都相同弥鹦,則兩個(gè)頁(yè)面具有相同的源肚逸。

下面做一些說(shuō)明:

  1. https://zz.zzs7.top/mysql-optimization.html
  2. http://zz.zzs7.top/mysql-optimization.html
  3. https://zz.zzs7.top:8000/mysql-optimization.html
  4. https://s7.zzs7.top/mysql-optimization.html
  5. https://104.125.11.39/mysql-optimization.html

上面的鏈接中:

  • 1和2比較:不是同源,因?yàn)?用的https彬坏,2用的是http朦促。屬于協(xié)議不同。
  • 1和3比較:不是同源栓始,1未指定端口的時(shí)候务冕,默認(rèn)使用的是80,而3使用的是8000端口,屬于端口不同幻赚。
  • 1和4比較:不是同源禀忆,域名不同。
  • 1和5比較:雖然1部署在了該ip地址對(duì)應(yīng)的服務(wù)器落恼,但是依然不是同源箩退。

在不同源的情況下1站點(diǎn)里面的js腳本采用ajax讀取其他三個(gè)站點(diǎn)中的數(shù)據(jù)是會(huì)報(bào)錯(cuò)的。

注:IE瀏覽器未將不同端口加入同源策略的組成部分佳谦。

跨域

受同源策略的影響戴涝,不是 同源下的腳本不能操作其他源下面的對(duì)象。想要操作其他源下的對(duì)象就需要跨域。

為什么要跨域

比如某視頻網(wǎng)站由于數(shù)據(jù)太多啥刻,分布在了不同的服務(wù)器上奸鸯,所以需要突破同源策略,實(shí)現(xiàn)數(shù)據(jù)交互郑什。

跨域的實(shí)現(xiàn)

有以下幾種實(shí)現(xiàn)方式:

  • 降域(document.domain):同源策略認(rèn)為域和子域?qū)儆诓煌挠颉?/p>

    比如https://zz.zzs7.tophttps://s7.zzs7.top府喳。雖然都屬于zzs7.top域名的子域名,但是他們屬于不同域蘑拯。

    想讓上述兩個(gè)網(wǎng)頁(yè)之間通信,可以通過(guò)設(shè)置 document.damain='zzs7.top'兜粘,來(lái)讓瀏覽器認(rèn)為他們?cè)谕瑯拥挠蛏昃健蓚€(gè)頁(yè)面都需設(shè)置。

    <script>
        document.domain = 'zzs7.top';
        // 獲取父窗口中變量
    </script>
    

注:可以進(jìn)行降域孔轴,不能升域剃法。

  • 通過(guò)jsonp跨域:不同源雖然不能讀寫,但可以引用js路鹰。我們可以讓引用的js附帶數(shù)據(jù)來(lái)調(diào)用我們預(yù)先定義的函數(shù)贷洲,而數(shù)據(jù)當(dāng)作參數(shù)傳入。

     <script>
        var script = document.createElement('script');
        script.type = 'text/javascript';
    
        // 傳參一個(gè)回調(diào)函數(shù)名給后端晋柱,方便后端返回時(shí)執(zhí)行這個(gè)在前端定義的回調(diào)函數(shù)
        script.src = 'http://zz.zzs7.top/login?user=admin&callback=handleCallback';
        document.head.appendChild(script);
    
        // 回調(diào)執(zhí)行函數(shù)
        function handleCallback(res) {
            alert(JSON.stringify(res));
        }
     </script>
    
  • CORS:跨域資源共享:一個(gè)W3C標(biāo)準(zhǔn)优构,它允許瀏覽器向跨源服務(wù)器發(fā)起XMLHttpRequest請(qǐng)求,和ajax同源的使用方法一致(區(qū)別在于對(duì)于跨域請(qǐng)求瀏覽器的請(qǐng)求會(huì)有附加的相關(guān)設(shè)置雁竞,用戶看不到)钦椭,分簡(jiǎn)單請(qǐng)求和非簡(jiǎn)單請(qǐng)求。

  • 通過(guò) location.hash:a欲與b跨域相互通信碑诉,通過(guò)中間頁(yè)c來(lái)實(shí)現(xiàn)彪腔。 三個(gè)頁(yè)面,不同域之間利用iframe的location.hash傳值进栽,相同域之間直接js訪問(wèn)來(lái)通信德挣。

  • window.name:window.name屬性的獨(dú)特之處:name值在不同的頁(yè)面(甚至不同域名)加載后依舊存在,并且可以支持非常長(zhǎng)的 name 值(2MB)快毛。

  • postMessage跨域:postMessage是HTML5 XMLHttpRequest Level 2中的API格嗅,且是為數(shù)不多可以跨域操作的window屬性之一,它可用于解決以下方面的問(wèn)題:

    • 頁(yè)面和其打開的新窗口的數(shù)據(jù)傳遞
    • 多窗口之間消息傳遞
    • 頁(yè)面與嵌套的iframe消息傳遞
    • 上面三個(gè)場(chǎng)景的跨域數(shù)據(jù)傳遞

    用法:postMessage(data,origin)方法接受兩個(gè)參數(shù)
    data: html5規(guī)范支持任意基本類型或可復(fù)制的對(duì)象祸泪,但部分瀏覽器只支持字符串吗浩,所以傳參時(shí)最好用JSON.stringify()序列化。
    origin: 協(xié)議+主機(jī)+端口號(hào)没隘,也可以設(shè)置為"*"懂扼,表示可以傳遞給任意窗口,如果要指定和當(dāng)前窗口同源的話設(shè)置為"/"。

還有一些比的阀湿,比如可以通過(guò)nginx代理實(shí)現(xiàn)跨域等赶熟,就不在文章中細(xì)說(shuō)了,后續(xù)有機(jī)會(huì)詳細(xì)實(shí)踐一下每種方式陷嘴。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末映砖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灾挨,更是在濱河造成了極大的恐慌邑退,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳澄,死亡現(xiàn)場(chǎng)離奇詭異地技,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秒拔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門莫矗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人砂缩,你說(shuō)我怎么就攤上這事作谚。” “怎么了庵芭?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵妹懒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我喳挑,道長(zhǎng)彬伦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任伊诵,我火速辦了婚禮单绑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘曹宴。我一直安慰自己搂橙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布笛坦。 她就那樣靜靜地躺著区转,像睡著了一般。 火紅的嫁衣襯著肌膚如雪版扩。 梳的紋絲不亂的頭發(fā)上废离,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音礁芦,去河邊找鬼蜻韭。 笑死悼尾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肖方。 我是一名探鬼主播闺魏,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼俯画!你這毒婦竟也來(lái)了析桥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤艰垂,失蹤者是張志新(化名)和其女友劉穎泡仗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體材泄,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沮焕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拉宗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辣辫,死狀恐怖旦事,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情急灭,我是刑警寧澤姐浮,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站葬馋,受9級(jí)特大地震影響卖鲤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜畴嘶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一蛋逾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窗悯,春花似錦区匣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至欺旧,卻和暖如春姑丑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辞友。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工栅哀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓昌屉,卻偏偏與公主長(zhǎng)得像钙蒙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子间驮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 題目1.什么是同源策略? 同源策略(Same origin Policy): 瀏覽器出于安全方面的考慮躬厌,只允許與本...
    FLYSASA閱讀 1,729評(píng)論 0 6
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)竞帽。 注意:講述HT...
    kismetajun閱讀 27,521評(píng)論 1 45
  • Section1扛施、為什么要跨域? 自古以來(lái)(1995年起)屹篓,為了用戶的信息安全疙渣,瀏覽器就引入了同源策略。那么同源策...
    不去解釋閱讀 556評(píng)論 0 0
  • 1堆巧、感恩大姐也開始改變自己妄荔,愿意堅(jiān)持使用肯定法來(lái)引導(dǎo)孩子。只要開始谍肤,任何時(shí)候都不算晚啦租。 2、感謝兒子在公共場(chǎng)合幫助...
    文娜_閱讀 181評(píng)論 0 3
  • 臨近晚飯荒揣,我在寫日記篷角,大寶則在我身邊玩耍,時(shí)而爬我身上系任,時(shí)而大聲叫喊恳蹲,看他無(wú)所事事的樣子,我知道手機(jī)和平板電腦肯定...
    不倒翁why閱讀 160評(píng)論 0 3