同源策略
瀏覽器的同源策略(same-origin policy)禁止網(wǎng)頁內(nèi)的腳本獲取他其他域的資源诗箍。這是瀏覽器最基礎(chǔ)的安全策略之一。
一個(gè)域的描述由三個(gè)部分組成:Schema (http/https)挽唉,Host 以及 Port滤祖。如果兩個(gè) url 的這三個(gè)部分都相同,則我們認(rèn)為是同一個(gè)域瓶籽。否則為不同域匠童。
跨域訪問
同源策略的本意是為了網(wǎng)絡(luò)安全。但特別是現(xiàn)在塑顺,很多業(yè)務(wù)場(chǎng)景是需要跨域訪問的俏让。比如我希望在自己的網(wǎng)站上,展示海外的天氣信息茬暇,而這個(gè)天氣信息可能就是從我的網(wǎng)頁直接 JS 請(qǐng)求海外的一個(gè)天氣信息服務(wù)來獲取的首昔。這個(gè)時(shí)候,我們就需要用到 CORS (Cross-Origin Resource Sharing (CORS) 即跨域資源共享勒奇。
CORS 工作原理
- 瀏覽器加載網(wǎng)頁 http://A.com劈彪,基于該網(wǎng)頁的 JS 定義痘括,向 http://B.com/info 發(fā)起 http 請(qǐng)求獲取一些資源信息。發(fā)送請(qǐng)求時(shí),瀏覽器會(huì)在請(qǐng)求頭里面加一個(gè) Origin頭信息懂算,其中包含 A 的域信息犯犁。
Origin: <scheme> "://" <hostname> [ ":" <port> ]
- B 服務(wù)在收到 A 的請(qǐng)求后驾胆,會(huì)檢查 Origin 頭里的信息,同時(shí)在返回報(bào)文頭里面廉價(jià)一個(gè) Access-Control-Allow-Origin 頭信息來聲明允許訪問返回資源信息的域抗愁。("*" 則代表所有域都可以訪問)
Access-Control-Allow-Origin: *
- 瀏覽器收到 B 的返回報(bào)文(即資源)撮珠。檢查報(bào)文頭 Access-Control-Allow-Origin 內(nèi)的域許可信息——允許 A 訪問該資源。此時(shí),瀏覽器會(huì)正常允許網(wǎng)頁 A 讀取此時(shí)獲取到的 B 資源。