JS中同源政策及AJAX跨域

一备畦、同源政策

?瀏覽器的同源政策限制了從一個(gè)源加載另外一個(gè)源的資源僵闯,它是瀏覽器的安全基石县好,所謂同源是指:

  1. 協(xié)議相同
  2. 域名相同
  3. 端口相同
    ?注意:IE的同源策略有兩個(gè)例外:

1.授信范圍:兩個(gè)相互之間高度互信的域名构哺,如公司域名捡絮,不遵守同源策略的限制
2.端口:IE未將端口號加入到同源策略的組成部分之中(如例四熬芜,在IE中則認(rèn)為同源)

?舉例說明:

以下與http://example.com:80/exam.html的同源性檢測
1.https://example.com:80/exam.html        //不同源,協(xié)議不同
2.http://example2.com:80/exam.html        //不同源福稳,域名不同
3.http://www.example.com:80/exam.html     //不同源涎拉,域名不同
4.http://example.com:81/exam.html         //不同源,端口不同 (此時(shí)IE中認(rèn)為同源)
5.http://example.com:80/exam2.html        //同源的圆,協(xié)議鼓拧、域名、端口都同

二越妈、源的更改(document.domain)

?由于同源政策的影響季俩,即使是形如http://example.com:80/exam.htmlhttp://www.example.com:80/exam.html也認(rèn)為是異源而無法請求,這里有一個(gè)簡單的方法可以完成他們之間的通信梅掠。
?瀏覽器允許將document.domain設(shè)置為其當(dāng)前域或其當(dāng)前域的超級域酌住,所以這里只需要將http://www.example.com:80/exam.html的document.domain設(shè)置為example.com即可。

三阎抒、CORS

?CORS全稱是"跨域資源共享"(Cross-origin resource sharing),它需要瀏覽器和服務(wù)器同時(shí)支持酪我,以實(shí)現(xiàn)AJAX的異源請求。其實(shí)現(xiàn)主要依靠服務(wù)器的設(shè)置挠蛉,即服務(wù)器HTTP響應(yīng)頭的“Access-Control-Allow-Origin”字段中加入允許跨域訪問的域名即可祭示,類似一個(gè)白名單的功能肄满。

以http://ken.com訪問http://qaq.com為例
服務(wù)器端:
response.setHeader("Access-Control-Allow-Origin","http://ken.com");

四谴古、JSONP

?AJAX跨域請求受限,而直接通過script標(biāo)簽獲取js文件不受限稠歉,JSONP正是利用這個(gè)原理實(shí)現(xiàn)的跨域請求掰担。

模擬數(shù)據(jù):
{(callback)}({ "name":"ken","password":"hahahaha"})
服務(wù)器端:  //數(shù)據(jù)作為回調(diào)函數(shù)參數(shù)傳回  
var string = fs.readFileSync('./qq_private.jsonp','utf-8')
response.setHeader('Content-Type', 'application/json;charset=utf-8')
string=string.replace("{(callback)}",query.callback)
response.end(string)
客戶端:  //定義函數(shù)處理接收到的數(shù)據(jù)
function fn(data){
   console.log(data)
}
var script=document.createElement("script")
script.src="http://qq.com/qq_private.jsonp?functionName=fn"
document.head.appendChild(script)

四、CORS和JSONP的區(qū)別

  1. 原理不同怒炸,CORS是通過類似白名單的方式完成AJAX異域請求带饱,而JSONP卻是利用<script>標(biāo)簽的請求不受同源政策影響實(shí)現(xiàn)的,事實(shí)上已經(jīng)與AJAX無關(guān)。
  2. JSONP由于其利用<script>的src屬性發(fā)送請求勺疼,只能是GET方法教寂,而CORS支持所有請求方法
  3. JSONP由于并沒有訪問權(quán)限的設(shè)置,相當(dāng)于大家都可以訪問該數(shù)據(jù)执庐,因此存在了一定安全問題酪耕,而CORS由于本身就是只有允許的源才可訪問成功,故相對安全
  4. JSONP支持老式瀏覽器轨淌,因?yàn)槠浔举|(zhì)只是<script>標(biāo)簽請求而已迂烁,而CORS則需要服務(wù)器與客戶端瀏覽器同時(shí)支持

1.JavaScript標(biāo)準(zhǔn)參考教程-同源政策 阮一峰
2.HTTP訪問控制 MDN
3.瀏覽器的同源策略 MDN
4.說說JSON和JSONP,也許你會豁然開朗递鹉,含jQuery用例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盟步,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子躏结,更是在濱河造成了極大的恐慌却盘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窜觉,死亡現(xiàn)場離奇詭異谷炸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)禀挫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門旬陡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人语婴,你說我怎么就攤上這事描孟。” “怎么了砰左?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵匿醒,是天一觀的道長。 經(jīng)常有香客問我缠导,道長廉羔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任僻造,我火速辦了婚禮憋他,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘髓削。我一直安慰自己竹挡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布立膛。 她就那樣靜靜地躺著揪罕,像睡著了一般梯码。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上好啰,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天轩娶,我揣著相機(jī)與錄音,去河邊找鬼框往。 笑死罢坝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搅窿。 我是一名探鬼主播嘁酿,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼男应!你這毒婦竟也來了闹司?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沐飘,失蹤者是張志新(化名)和其女友劉穎游桩,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耐朴,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡借卧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筛峭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铐刘。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖影晓,靈堂內(nèi)的尸體忽然破棺而出镰吵,到底是詐尸還是另有隱情,我是刑警寧澤挂签,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布疤祭,位于F島的核電站,受9級特大地震影響饵婆,放射性物質(zhì)發(fā)生泄漏勺馆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一侨核、第九天 我趴在偏房一處隱蔽的房頂上張望草穆。 院中可真熱鬧,春花似錦芹关、人聲如沸续挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春轴总,著一層夾襖步出監(jiān)牢的瞬間直颅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工怀樟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留功偿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓往堡,卻偏偏與公主長得像械荷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子虑灰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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