本節(jié)內(nèi)容:何為跨域?何為同源策略?
- 跨域:但是在實(shí)際的場(chǎng)景中,又確實(shí)有很多地方需要突破同源策略的限制,也就是我們常說(shuō)的跨域
- 同源策略:為了保證用戶(hù)信息的安全,防止惡意網(wǎng)站竊取用戶(hù)數(shù)據(jù),同源策略做了很?chē)?yán)格的限制——只允許本域內(nèi)的腳本讀寫(xiě)本域內(nèi)的資源
一、何為跨域?
說(shuō)到跨域,有必要先了解一下同源策略。
1)同源策略
同源策略(Same origin policy)是由 NetScape 公司在1995年提出的一種安全策略;
同源策略只是一個(gè)約定,提出后被各個(gè)瀏覽器廠商采納,并以各自的方式實(shí)現(xiàn)了同源策略。
-
何為同源策略?
- 同源策略:是瀏覽器最核心也最基本的安全功能,會(huì)約束瀏覽器的行為;
- 同源策略會(huì)限制瀏覽器:只允許本域內(nèi)的腳本讀寫(xiě)本域內(nèi)的資源,不允許訪(fǎng)問(wèn)本域外的資源。
-
為何需要同源策略?
為保證用戶(hù)信息的安全,防止惡意網(wǎng)站竊取用戶(hù)數(shù)據(jù),瀏覽器需要實(shí)現(xiàn)嚴(yán)格限制
例如:我剛登陸了某寶網(wǎng),此時(shí)再去登陸 B 網(wǎng)站,B 網(wǎng)站就可以使用 JS 獲取到我的某寶賬戶(hù)信息,然后它做什么都可以了。
-
如何判斷是否同源?
判斷要素有三:協(xié)議、域名、端口號(hào);
三者全部一致才視為同源,即屬于同一個(gè)域;否則視為非同源。
-
限制范圍
在非同源情況下,存在如下受限行為:
- 無(wú)法共享 cookie, localStorage, indexDB
- 無(wú)法操作彼此的 dom 元素
- 無(wú)法發(fā)送 ajax 請(qǐng)求
2)跨域
-
域
域(Domain)是Windows網(wǎng)絡(luò)中獨(dú)立運(yùn)行的單位;
域之間相互訪(fǎng)問(wèn)則需要建立信任關(guān)系,信任關(guān)系是連接在域與域之間的橋梁;
當(dāng)一個(gè)域與其他域建立了信任關(guān)系后,2個(gè)域之間不但可以按需要相互進(jìn)行管理,還可以跨網(wǎng)分配文件和打印機(jī)等設(shè)備資源,使不同的域之間實(shí)現(xiàn)網(wǎng)絡(luò)資源的共享與管理.
-
跨域
- 跨域
突破同源策略的限制,在兩個(gè)不同的域之間(非同源頁(yè)面)實(shí)現(xiàn)資源交互。
本域(同源)和跨域是一對(duì),就像國(guó)內(nèi)企業(yè)和跨國(guó)企業(yè),這樣更形象理解跨域概念
- 跨域分類(lèi)
1)使用 Ajax 引發(fā)的跨域問(wèn)題
當(dāng)調(diào)用 Ajax 時(shí):調(diào)用 Ajax 發(fā)送請(qǐng)求的頁(yè)面 所在的域,和被請(qǐng)求頁(yè)面所在的域不一致
2)類(lèi)似頁(yè)面嵌入 ifream 引起的跨域問(wèn)題
當(dāng)操作 ifream 內(nèi)引入的元素時(shí):ifream 所屬頁(yè)面的域,和 ifream 引入頁(yè)面的域不一致
自己分的類(lèi),為了方便記憶,剛接觸時(shí)還把它們弄混了
但本質(zhì)都一樣,即:突破同源策略限制,請(qǐng)求域外資源
二、為何需要跨域?
- 在實(shí)際的場(chǎng)景中,確實(shí)有很多地方需要突破同源策略的限制,也就是我們常說(shuō)的跨域
- 如果網(wǎng)站足夠簡(jiǎn)單,一個(gè)網(wǎng)頁(yè)搞定,好吧這樣確實(shí)不需要跨域,但更多時(shí)候,我們需要它
- 例如:
- 我想要制作一個(gè)天氣預(yù)報(bào)軟件,就需要獲取氣象局的檢測(cè)信息
- 我想要制作一個(gè)音樂(lè)盒,就需要獲取音樂(lè)信息……