本節(jié)內(nèi)容:何為跨域?何為同源策略?
- 跨域:但是在實(shí)際的場景中奠蹬,又確實(shí)有很多地方需要突破同源策略的限制,也就是我們常說的跨域
- 同源策略:為了保證用戶信息的安全嗡午,防止惡意網(wǎng)站竊取用戶數(shù)據(jù)囤躁,同源策略做了很嚴(yán)格的限制——只允許本域內(nèi)的腳本讀寫本域內(nèi)的資源
一、何為跨域荔睹?
說到跨域狸演,有必要先了解一下同源策略。
1)同源策略
同源策略(Same origin policy)是由 NetScape 公司在1995年提出的一種安全策略僻他;
同源策略只是一個(gè)約定宵距,提出后被各個(gè)瀏覽器廠商采納,并以各自的方式實(shí)現(xiàn)了同源策略吨拗。
-
何為同源策略满哪?
- 同源策略:是瀏覽器最核心也最基本的安全功能婿斥,會(huì)約束瀏覽器的行為;
- 同源策略會(huì)限制瀏覽器:只允許本域內(nèi)的腳本讀寫本域內(nèi)的資源哨鸭,不允許訪問本域外的資源民宿。
-
為何需要同源策略?
為保證用戶信息的安全像鸡,防止惡意網(wǎng)站竊取用戶數(shù)據(jù)活鹰,瀏覽器需要實(shí)現(xiàn)嚴(yán)格限制
例如:我剛登陸了某寶網(wǎng),此時(shí)再去登陸 B 網(wǎng)站只估,B 網(wǎng)站就可以使用 JS 獲取到我的某寶賬戶信息志群,然后它做什么都可以了。
-
如何判斷是否同源蛔钙?
判斷要素有三:協(xié)議赖舟、域名、端口號(hào)夸楣;
三者全部一致才視為同源宾抓,即屬于同一個(gè)域;否則視為非同源豫喧。
-
限制范圍
在非同源情況下石洗,存在如下受限行為:
- 無法共享 cookie, localStorage, indexDB
- 無法操作彼此的 dom 元素
- 無法發(fā)送 ajax 請求
2)跨域
-
域
域(Domain)是Windows網(wǎng)絡(luò)中獨(dú)立運(yù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è)不同的域之間(非同源頁面)實(shí)現(xiàn)資源交互篙程。
本域(同源)和跨域是一對(duì)枷畏,就像國內(nèi)企業(yè)和跨國企業(yè),這樣更形象理解跨域概念
- 跨域分類
1)使用 Ajax 引發(fā)的跨域問題
當(dāng)調(diào)用 Ajax 時(shí):調(diào)用 Ajax 發(fā)送請求的頁面 所在的域虱饿,和被請求頁面所在的域不一致
2)類似頁面嵌入 ifream 引起的跨域問題
當(dāng)操作 ifream 內(nèi)引入的元素時(shí):ifream 所屬頁面的域拥诡,和 ifream 引入頁面的域不一致
自己分的類,為了方便記憶氮发,剛接觸時(shí)還把它們弄混了
但本質(zhì)都一樣渴肉,即:突破同源策略限制,請求域外資源
二爽冕、為何需要跨域仇祭?
- 在實(shí)際的場景中,確實(shí)有很多地方需要突破同源策略的限制颈畸,也就是我們常說的跨域
- 如果網(wǎng)站足夠簡單乌奇,一個(gè)網(wǎng)頁搞定嚣艇,好吧這樣確實(shí)不需要跨域,但更多時(shí)候华弓,我們需要它
- 例如:
- 我想要制作一個(gè)天氣預(yù)報(bào)軟件食零,就需要獲取氣象局的檢測信息
- 我想要制作一個(gè)音樂盒,就需要獲取音樂信息……