概念
跨域是個(gè)老生常談的問題,指的是網(wǎng)頁中的JS想去請(qǐng)求非自己域內(nèi)的數(shù)據(jù)或者操作非自己域內(nèi)的DOM對(duì)象,說起來有抽象,就好比
- 監(jiān)獄內(nèi)的犯人想去監(jiān)獄外買點(diǎn)水果回來牢里吃
- 監(jiān)獄內(nèi)的犯人想搜獄警大人的口袋
以上兩種神操作一般情況下當(dāng)然是行不通的!
原因
用腳指頭想想都知道的,因?yàn)檫@是規(guī)定!
誰規(guī)定的
- 代碼世界里當(dāng)然是瀏覽器規(guī)定的,現(xiàn)實(shí)世界里當(dāng)然是監(jiān)獄規(guī)定的
- 對(duì)于第一種情況:即請(qǐng)求本域外的數(shù)據(jù),請(qǐng)求能發(fā)出去,服務(wù)器也能正常返回,但是瀏覽器把數(shù)據(jù)攔截了、攔截了、攔截了!
- 對(duì)于第二種情況:操作非自己域內(nèi)的`DOM對(duì)象:很簡(jiǎn)單,連那個(gè)DOM對(duì)象你都獲取不到!獲取不到!獲取不到!
又有抽象?
就好比:
- 獄警把你托人在外買的水里給默收然后自己吃掉了,在電影里也是有挺多這種操作的,常規(guī)操作!
- 犯人根本就碰不到獄警,因?yàn)榉溉舜蟛糠謺r(shí)間是被關(guān)起來的
同域
現(xiàn)實(shí)世界里當(dāng)然指的是同個(gè)牢房啦!
而瀏覽器世界里指的是同協(xié)議并且同域名并且同端口號(hào),俗稱三證齊全,比如http、taobao.com、80,也叫做瀏覽器的同源策略,目的當(dāng)然是為了:
- 保證獄警的安全
- 怕情緒不穩(wěn)定的家屬跑進(jìn)來暴打獄友
解決方法
規(guī)定是死的,但人是活的,只要人活著,總有辦法的嘛!
而繞過瀏覽器的同源策略就叫做跨域了!
因此跨域也有各種姿勢(shì),各顯神通!
比如JSONP就好比賄賂獄警,這個(gè)大家都懂的,不說了!
比如CORS就好比官方授權(quán),這個(gè)大家也懂的,也不說了!
具體操作細(xì)節(jié)感覺如果是我自己寫的話估計(jì)沒法超越以下這篇好文了:
九種跨域方式實(shí)現(xiàn)原理