就是要跨域

由于CORS(跨域)本身是具有安全隱患的所灸,因此瀏覽器默認(rèn)是禁止的荧琼。但跨域卻在web開發(fā)中具有很重要的作用譬胎,也是前端dev經(jīng)常為之頭痛的領(lǐng)域。那么命锄,前端到底如何跨這個域呢堰乔,且往下看。

前端常見的跨域手段如下:

1.script/link/img加載外部資源

一個網(wǎng)站常常會加載以下外部資源:

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<link rel="stylesheet" >

<img src=“http://www.otherdomain.com/apple.jpg” />

它們都有一個相似的特點脐恩,即js運行時一般很難去獲取其加載的資源內(nèi)容浩考。具體來說,有時候我們經(jīng)常需要請求類似http://www.otherdomain.com/data.json的文件被盈,那我們?nèi)绾文軌颢@取這個文件的內(nèi)容呢析孽?

2.發(fā)送ajax

面對上面的問題,大多數(shù)人就會說“發(fā)送ajax請求啊”只怎,具體實現(xiàn)如下:

$.get(‘/data.json’,function(res) {…});

可是不好意思親袜瞬,你這是同源的,當(dāng)然能請求到了身堡。如果你訪問的是http://www.otherdomain.com/data.json,那么一定會報錯邓尤,提示你不允許跨域。

其實仔細想想也不難理解贴谎,別人站點上的資源你可以通過瀏覽器打開訪問汞扎,這沒問題,因為你是處在當(dāng)前的站點訪問當(dāng)前的資源擅这;但是如果你在自己的站內(nèi)去請求別人的資源澈魄,還能隨隨便便請求到的話,是你你愿意不仲翎?

所以痹扇,如果你利用ajax請求到了外部資源,只有一種情況:被訪問的server端允許你跨域溯香,即:

  • jsonp(返回script后調(diào)用前端方法)

  • 后端在response header中設(shè)置了Allow-Control-Allow-Origin: matcher(例如鲫构,*)

3.利用iframe

其實很容易想到,iframe本身是一個html tag玫坛,那么它和其他能夠加載資源的tag類似结笨,肯定也能加載外部頁面,從這一點來說它算跨域。

但有一個很重要的前提:如果加載的iframe是一個外部頁面炕吸,并且你無法修改這個頁面本身(比如某個站點的首頁)伐憾,那么你只能在iframe里去操作其加載的頁面。換言之算途,如果你想在主頁面內(nèi)訪問嵌套的iframe內(nèi)容塞耕,那同樣還是有安全問題蚀腿,是會被禁止的嘴瓤。

對于這種情況的處理,就得說說postMessage了莉钙。我們知道廓脆,頁面內(nèi)嵌套頁面是會形成window鏈的,即top->parent->...磁玉,而postMessage可以實現(xiàn)不同window之間的消息傳遞停忿。

假設(shè)A頁面和B頁面屬于不同的domain,A中的iframe加載了B蚊伞,那么用postMessage通信的方式如下:

  • 在B中添加消息監(jiān)聽事件
window.addEventListener(‘message’, function(e){ … });
  • 在A頁面里找到B的window后調(diào)用postMessage發(fā)送數(shù)據(jù)
window.frames[0].postMessage(’some data’, '*');

可以看到B其實已經(jīng)知道自己需要跨域席赂,所以向A暴露了事件作為間接操作dom的接口,進行了自發(fā)自收的通信方式时迫。所以只有當(dāng)我們有權(quán)限修改所加載的外部頁面時颅停,postMessage才行得通。

到此掠拳,基本可以得出結(jié)論癞揉,如果在極端情況(只有前端,無法修改后端溺欧,無法修改外部資源喊熟,只有一個外部api或者url)下,前端是不能跨域的姐刁,這是瀏覽器的限制芥牌。

任性就是想跨域

那么也不是沒有辦法:我們可以修改瀏覽器的設(shè)置,取消瀏覽器對跨域的限制聂使。

其實chrome extension app就允許你這么干胳泉,開發(fā)extension時,在mainfest.json里岩遗,如下配置你的app即可讓瀏覽器對跨域沒有任何限制:

"permissions": [
  "http://*/*",
  "https://*/*"
]

所以許多chrome的插件也由此誕生扇商,其中votes比較多的Allow-Control-Allow-Origin就是一個不錯的跨域toggle工具。

可是講真的宿礁,你這么任性取消了CORS的限制案铺,那我們還聊什么跨域呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梆靖,一起剝皮案震驚了整個濱河市控汉,隨后出現(xiàn)的幾起案子笔诵,更是在濱河造成了極大的恐慌,老刑警劉巖姑子,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乎婿,死亡現(xiàn)場離奇詭異,居然都是意外死亡街佑,警方通過查閱死者的電腦和手機谢翎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沐旨,“玉大人森逮,你說我怎么就攤上這事〈判” “怎么了褒侧?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谊迄。 經(jīng)常有香客問我闷供,道長,這世上最難降的妖魔是什么统诺? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任歪脏,我火速辦了婚禮,結(jié)果婚禮上篙议,老公的妹妹穿的比我還像新娘唾糯。我一直安慰自己,他們只是感情好鬼贱,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布移怯。 她就那樣靜靜地躺著,像睡著了一般这难。 火紅的嫁衣襯著肌膚如雪舟误。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天姻乓,我揣著相機與錄音嵌溢,去河邊找鬼。 笑死蹋岩,一個胖子當(dāng)著我的面吹牛赖草,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剪个,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼秧骑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乎折,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绒疗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后骂澄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吓蘑,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年坟冲,在試婚紗的時候發(fā)現(xiàn)自己被綠了磨镶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡樱衷,死狀恐怖棋嘲,靈堂內(nèi)的尸體忽然破棺而出酒唉,到底是詐尸還是另有隱情矩桂,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布痪伦,位于F島的核電站侄榴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏网沾。R本人自食惡果不足惜癞蚕,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辉哥。 院中可真熱鬧桦山,春花似錦、人聲如沸醋旦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饲齐。三九已至钉凌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捂人,已是汗流浹背御雕。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滥搭,地道東北人酸纲。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像瑟匆,于是被迫代替她去往敵國和親闽坡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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

  • 什么是跨域? 2.) 資源嵌入:无午、媒役、、等dom標(biāo)簽宪迟,還有樣式中background:url()酣衷、@font-fac...
    電影里的夢i閱讀 2,367評論 0 5
  • 前言 原文地址:前端跨域總結(jié) 博主博客地址:Damonare的個人博客 相信每一個前端er對于跨域這兩個字都不會陌...
    秦至閱讀 1,394評論 4 51
  • 前言 原文地址:前端跨域總結(jié)博主博客地址:Damonare的個人博客 正文 1. 什么是跨域? 跨域一詞從字面意思...
    yo_yo_閱讀 498評論 0 5
  • 你說 能擁有幸福該多好 你說 不想再有紛紛擾擾 你說 這樣的天空下的這樣云 仿佛你我 要結(jié)伴游蕩 你曾說 我誰也替...
    喜歡吹泡泡閱讀 115評論 0 1
  • 香煙繞樹綠映紅 秋風(fēng)過后滿目橙 大雄殿內(nèi)佛不在 酒色財氣一場空
    孤石劉琳鋒閱讀 116評論 0 0