跨域

?

1.什么是跨域岂却?

本地域與服務端的域不一致井氢,是由瀏覽器同源策略限制的場景弦追,不同源即不同域,就是跨域花竞。

注意:協(xié)議端口不同造成的跨域劲件,前臺無能為力。 域僅僅是通過URL的首部來識別,而不會去嘗試判斷相同的IP對應著兩個域 零远。 或者兩個域是否在同一個IP上苗分。

2.什么是同源策略?

瀏覽器最核心也最基本的安全功能牵辣,如果缺少了同源策略摔癣,瀏覽器很容易受到XSS、CSFR等攻擊纬向。所謂同源是指"協(xié)議+域名+端口"三者相同供填。

只要 "協(xié)議+域名+端口" 任何一個不同都被當作不同的域。

3.跨域解決方案

(1)通過jsonp跨域

JSONP:

原理是:

動態(tài)插入script標簽罢猪,通過script標簽引入一個js文件,這個js文件載入成功后會執(zhí)行我們在url參數(shù)中指定的函數(shù)叉瘩,并且會把我們需要的json數(shù)據(jù)作為參數(shù)傳入膳帕。

由于同源策略的限制,XmlHttpRequest只允許請求當前源(域名薇缅、協(xié)議危彩、端口)的資源,為了實現(xiàn)跨域請求泳桦,可以通過script標簽實現(xiàn)跨域請求汤徽,然后在服務端輸出JSON數(shù)據(jù)并執(zhí)行回調函數(shù),從而解決了跨域的數(shù)據(jù)請求灸撰。

JSONP:json+padding(內填充)谒府,顧名思義,就是把JSON填充到一個盒子里

優(yōu)點:是兼容性好浮毯,簡單易用完疫,支持瀏覽器與服務器雙向通信。

缺點:只支持get债蓝。只支持http

JSONP的優(yōu)點是:它不像XMLHttpRequest對象實現(xiàn)的Ajax請求那樣受到同源策略的限制壳鹤;它的兼容性更好,在更加古老的瀏覽器中都可以運行饰迹,不需要XMLHttpRequest或ActiveX的支持芳誓;并且在請求完畢后可以通過調用callback的方式回傳結果。

JSONP的缺點則是:它只支持GET請求而不支持POST等其它類型的HTTP請求啊鸭;它只支持跨域HTTP請求這種情況锹淌,不能解決不同域的兩個頁面之間如何進行JavaScript調用的問題。

<script> function createJs(sUrl){ var oScript = document.createElement('script'); oScript.type = 'text/javascript'; oScript.src = sUrl; document.getElementsByTagName('head')[0].appendChild(oScript); } createJs('jsonp.js'); box({ 'name': 'test' }); function box(json){ alert(json.name); } </script>


總結:通過iframe的src屬性由外域轉向本地域莉掂,跨域數(shù)據(jù)即由iframe的window.name從外域傳遞到本地域葛圃。這個就巧妙地繞過了瀏覽器的跨域訪問限制,但同時它又是安全操作。


6库正、 跨域資源共享(CORS)

普通跨域請求:只服務端設置Access-Control-Allow-Origin即可曲楚,前端無須設置,若要帶cookie請求:前后端都需要設置褥符。

需注意的是:由于同源策略的限制龙誊,所讀取的cookie為跨域請求接口所在域的cookie,而非當前頁喷楣。

目前趟大,所有瀏覽器都支持該功能(IE8+:IE8/9需要使用XDomainRequest對象來支持CORS)),CORS也已經(jīng)成為主流的跨域解決方案铣焊。


CORS

服務器端對于CORS的支持逊朽,主要就是通過設置Access-Control-Allow-Origin來進行的。如果瀏覽器檢測到相應的設置曲伊,就可以允許Ajax進行跨域的訪問叽讳。

通過修改document.domain來跨子域

將子域和主域的document.domain設為同一個主域.前提條件:這兩個域名必須屬于同一個基礎域名!而且所用的協(xié)議,端口都要一致坟募,否則無法利用document.domain進行跨域

主域相同的使用document.domain

使用window.name來進行跨域

window對象有個name屬性岛蚤,該屬性有個特征:即在一個窗口(window)的生命周期內,窗口載入的所有的頁面都是共享一個window.name的,每個頁面對window.name都有讀寫的權限懈糯,window.name是持久存在一個窗口載入過的所有頁面中的

使用HTML5中新引進的window.postMessage方法來跨域傳送數(shù)據(jù)

還有flash涤妒、在服務器上設置代理頁面等跨域方式。個人認為window.name的方法既不復雜赚哗,也能兼容到幾乎所有瀏覽器她紫,這真是極好的一種跨域方法。


React中跨域問題的完美解決方案

針對react版本^16.6.0有多種解決方案


方案一:package.json中加上proxy代理配置

在packge.json加入

“proxy”:{

'/app':{

"tatget":"http://server.sssss.com:8080/.....",

secure:false,

"changeOrigin":true,

}

}


axios


import axios from 'axios'

http.post = function(api, data){

return new Promise((resolve, reject) =>{

axios.post(api, params).then((tes)=>{resolve(res)})

})

}


http.get = function(api, data){

return new Promise((resolve, reject) =>{

axios.get(api, params).then((tes)=>{resolve(res)})

})

}

export default http


在react組件中使用

const res = await http.post(url, params)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蜂奸,一起剝皮案震驚了整個濱河市犁苏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扩所,老刑警劉巖围详,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異祖屏,居然都是意外死亡助赞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門袁勺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雹食,“玉大人,你說我怎么就攤上這事期丰∪阂叮” “怎么了吃挑?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長街立。 經(jīng)常有香客問我舶衬,道長,這世上最難降的妖魔是什么赎离? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任逛犹,我火速辦了婚禮,結果婚禮上梁剔,老公的妹妹穿的比我還像新娘虽画。我一直安慰自己,他們只是感情好荣病,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布码撰。 她就那樣靜靜地躺著,像睡著了一般个盆。 火紅的嫁衣襯著肌膚如雪灸拍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天砾省,我揣著相機與錄音,去河邊找鬼混槐。 笑死编兄,一個胖子當著我的面吹牛,可吹牛的內容都是我干的声登。 我是一名探鬼主播狠鸳,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悯嗓!你這毒婦竟也來了件舵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤脯厨,失蹤者是張志新(化名)和其女友劉穎铅祸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體合武,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡临梗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稼跳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盟庞。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖汤善,靈堂內的尸體忽然破棺而出什猖,到底是詐尸還是另有隱情票彪,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布不狮,位于F島的核電站降铸,受9級特大地震影響,放射性物質發(fā)生泄漏荤傲。R本人自食惡果不足惜垮耳,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遂黍。 院中可真熱鬧终佛,春花似錦、人聲如沸雾家。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芯咧。三九已至牙捉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敬飒,已是汗流浹背邪铲。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留无拗,地道東北人带到。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像英染,于是被迫代替她去往敵國和親揽惹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容

  • 什么是跨域 跨域四康,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本搪搏。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    他方l閱讀 1,063評論 0 2
  • 什么是跨域 跨域闪金,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本疯溺。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,297評論 0 6
  • 題目1.什么是同源策略? 同源策略(Same origin Policy): 瀏覽器出于安全方面的考慮哎垦,只允許與本...
    FLYSASA閱讀 1,720評論 0 6
  • 什么是跨域 跨域喝检,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的撼泛,是瀏覽器對JavaScript實...
    HeroXin閱讀 836評論 0 4
  • 一挠说、什么是跨域 url的組成 JavaScript出于安全方面的考慮,不允許跨域調用其他頁面的對象愿题。那什么是跨域呢...
    古城凌三少閱讀 4,694評論 0 0