同源策略
同源策略(Same origin policy)是瀏覽器最核心也最基礎(chǔ)的安全功能,同源策略會(huì)阻止一個(gè)域的 javascript 腳本和另外一個(gè)域的內(nèi)容進(jìn)行交互。所謂同源(即指在同一個(gè)域)就是兩個(gè)頁面具有相同的協(xié)議(protocol)、主機(jī)(host)和端口號(hào)(port)
為什么瀏覽器不支持跨域
- 無法讀取非同源網(wǎng)頁的 Cookie、LocalStorage 和 IndexedDB
- 無法接觸非同源網(wǎng)頁的 DOM
- 無法向非同源地址發(fā)送ajax
實(shí)現(xiàn)跨域的方案
所有實(shí)現(xiàn)跨域方案demo 以提交至github,有需要可以查看
- jsonp
JSONP
由于采用script
資源文件請(qǐng)求,而資源請(qǐng)求為GET
請(qǐng)求,故僅在GET
請(qǐng)求中使用JSONP
跨域請(qǐng)求。使用ajax
請(qǐng)求網(wǎng)站,而服務(wù)器返回的JSONP
callback
是惡意執(zhí)行代碼,導(dǎo)致返回瀏覽器后會(huì)自動(dòng)執(zhí)行惡意代碼,威脅數(shù)據(jù)安全。(XSS
攻擊) - cors
若攜帶憑證發(fā)起請(qǐng)求,CORS
只能指定一個(gè)允許源,不能使用通配符和指定多個(gè)源。 - postMessage
- document.domain
? 在根域范圍內(nèi),瀏覽器允許把domain
屬性的值設(shè)置為它的上一級(jí)域。例如,在a.test.com
域內(nèi),可以把domain
設(shè)置為test.com
。16
所以document.domain
只能處理父域相同,子域不同的情況。 - window.name
- location.hash
- http-proxy
- nginx
- websocket