常見跨域解決方式

跨域

瀏覽器發(fā)送的請求地址(URL)與所在頁面的地址 不同(端口/協(xié)議/域名 其一不同)挖帘。簡言之麻裳,瀏覽器發(fā)出的請求url铭腕,與其所在頁面的url,不一樣邮旷。此時,同源機制會讓瀏覽器拒收 服務器響應回來的數(shù)據(jù)笛求。

同源機制

同源策略/SOP(Same origin policy)是一種約定廊移,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能探入,如果缺少了同源策略狡孔,瀏覽器很容易受到XSS、CSFR等攻擊蜂嗽。所謂同源是指"協(xié)議+域名+端口"三者相同苗膝,即便兩個不同的域名指向同一個ip地址,也非同源植旧。不同源的客戶端腳本在沒有明確授權的情況下辱揭,不能讀寫對方的資源。

三種解決方式

JSONP

JSONP(JSON with padding(添加))是通過 script 標簽加載數(shù)據(jù)的方式病附,去獲取數(shù)據(jù)问窃,并把數(shù)據(jù) 當做 JS 代碼來執(zhí)行:提前在頁面上聲明一個函數(shù),函數(shù)名通過接口傳參的方式傳給后臺完沪,后臺解析到函數(shù)名后在原始數(shù)據(jù)上「包裹」這個函數(shù)名域庇,發(fā)送給前端。換句話說覆积,JSONP 需要對應接口的后端的配合才能實現(xiàn)听皿。
jsonp缺點:只能實現(xiàn)get一種請求。JSONP太駭客宽档,不如下面的CORS正統(tǒng)尉姨。

 <script>
    var script = document.createElement('script');
    script.type = 'text/javascript';
    // 傳參一個回調函數(shù)名給后端,方便后端返回時執(zhí)行這個在前端定義的回調函數(shù)
    script.src = 'http://www.domain2.com:8080/login?callback=handleCallback';
    document.head.appendChild(script);

    // 回調執(zhí)行函數(shù)
    function handleCallback(res) {
        alert(JSON.stringify(res));
    }
 </script>
// 服務端返回如下(返回時即執(zhí)行全局函數(shù))

handleCallback({"status": true, "user": "admin"})

這個請求到達后端后吗冤,后端會去解析callback這個參數(shù)又厉,獲取到字符串handleCallback九府,在發(fā)送數(shù)據(jù)時調用handleCallback這個函數(shù),把數(shù)據(jù)作為參數(shù)傳過來馋没。 用戶只需要在加載 提前在頁面定義好handleCallback這個全局函數(shù)昔逗,在函數(shù)內部處理參數(shù)即可。

CORS

CORS 全稱是 跨域資源共享(Cross-Origin Resource Sharing)篷朵,是一種 ajax 跨域請求資源的方式勾怒,支持現(xiàn)代瀏覽器,IE支持10以上声旺。 實現(xiàn)方式很簡單笔链,
1 當你使用 XMLHttpRequest 發(fā)送請求時,瀏覽器發(fā)現(xiàn)該請求不符合同源策略腮猖,會給該請求加一個請求頭:Origin鉴扫;(瀏覽器無需做設置 只需發(fā)送ajax)
2 后臺服務器收到請求后,會進行一系列處理澈缺,如果確定接受請求坪创,則在返回結果中加入一個響應頭:Access-Control-Allow-Origin (換言之,服務器允許的域url姐赡,會加入此響應頭莱预,相當于一個憑證);
3 瀏覽器判斷該相應頭中是否包含 Origin 的值,如果有项滑,則瀏覽器會處理響應依沮,我們就可以拿到響應數(shù)據(jù),如果不包含枪狂,瀏覽器直接駁回危喉,這時我們無法拿到響應數(shù)據(jù)。
所以 CORS 的表象是讓你覺得它與同源的 ajax 請求沒啥區(qū)別州疾,代碼完全一樣辜限。

postMessage

通過讓iframe的js元素,執(zhí)行postmessage()严蓖,以發(fā)送消息給iframe訪問的url網(wǎng)站列粪,如果網(wǎng)站服務器收到消息(即 監(jiān)聽到了 以該消息為名 的事件)并進行處理,則瀏覽器可以實現(xiàn)一定程度的跨域谈飒。
瀏覽器發(fā)送數(shù)據(jù) window.frames[0].postMessage(this.value,'*');
服務器監(jiān)聽跨域請求&瀏覽器監(jiān)聽返回的數(shù)據(jù) window.addEventListener('message',function(e) {})
參考https://blog.csdn.net/tang_yi_/article/details/79401280

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市态蒂,隨后出現(xiàn)的幾起案子杭措,更是在濱河造成了極大的恐慌,老刑警劉巖钾恢,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件手素,死亡現(xiàn)場離奇詭異鸳址,居然都是意外死亡,警方通過查閱死者的電腦和手機泉懦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門稿黍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崩哩,你說我怎么就攤上這事巡球。” “怎么了邓嘹?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵酣栈,是天一觀的道長。 經常有香客問我汹押,道長矿筝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任棚贾,我火速辦了婚禮窖维,結果婚禮上,老公的妹妹穿的比我還像新娘妙痹。我一直安慰自己铸史,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布细诸。 她就那樣靜靜地躺著沛贪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪震贵。 梳的紋絲不亂的頭發(fā)上利赋,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音猩系,去河邊找鬼媚送。 笑死,一個胖子當著我的面吹牛寇甸,可吹牛的內容都是我干的塘偎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拿霉,長吁一口氣:“原來是場噩夢啊……” “哼吟秩!你這毒婦竟也來了?” 一聲冷哼從身側響起绽淘,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涵防,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沪铭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壮池,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡偏瓤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了椰憋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厅克。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖橙依,靈堂內的尸體忽然破棺而出证舟,到底是詐尸還是另有隱情,我是刑警寧澤票编,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布褪储,位于F島的核電站,受9級特大地震影響慧域,放射性物質發(fā)生泄漏鲤竹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一昔榴、第九天 我趴在偏房一處隱蔽的房頂上張望辛藻。 院中可真熱鬧,春花似錦互订、人聲如沸吱肌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氮墨。三九已至,卻和暖如春吐葵,著一層夾襖步出監(jiān)牢的瞬間规揪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工温峭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猛铅,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓凤藏,卻偏偏與公主長得像奸忽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子揖庄,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • 1. 什么是跨域 跨域栗菜,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的蹄梢,是瀏覽器對JavaScri...
    cbw100閱讀 6,332評論 2 86
  • 題目1.什么是同源策略? 同源策略(Same origin Policy): 瀏覽器出于安全方面的考慮疙筹,只允許與本...
    FLYSASA閱讀 1,721評論 0 6
  • <轉>詳解跨域(最全的解決方案) 什么是跨域跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的腌歉,...
    涅槃快樂是金閱讀 4,743評論 0 3
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本齐苛。它是由瀏覽器的同源策略造成的翘盖,是瀏覽器對JavaScript實...
    他方l閱讀 1,064評論 0 2
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本凹蜂。它是由瀏覽器的同源策略造成的馍驯,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,299評論 0 6