同源策略(Same origin policy)使得來自于不同來源的腳本坝疼,無法讀取或修改當前源對象骂铁。它是瀏覽器最核心也是最基本的安全功能统阿。
1 同源判斷規(guī)則
如果域名或 IP 地址臀规、端口與協(xié)議都相同者春,那么就會被判定為同源。
假設(shè)有這么一個 URL:http://www.deniro.net
辉懒,下表中的 URL 與此比較阳惹,判斷是否同源:
URL | 是否同源 | 原因 |
---|---|---|
http://www.deniro.net/welcome.html |
同源 | - |
https://www.deniro.net/welcome.html |
不同源 | 協(xié)議不同 |
http://www.deniro.net:8080/welcome.html |
不同源 | 端口號不同 |
http://book.deniro.net/welcome.html |
不同源 | 域名不同 |
2 跨域加載資源
<script>
、<img>
眶俩、<iframe>
莹汤、<link>
標簽不受同源策略限制,可以跨域加載資源颠印。
比如我們可以在我們的項目中加載 CDN 上的 Vue.js:
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
CDN 的全稱是 Content Delivery Network 纲岭,即 內(nèi)容分發(fā)網(wǎng)絡(luò) 。CDN 是構(gòu)建在網(wǎng)絡(luò)之上的內(nèi)容分發(fā)網(wǎng)絡(luò)线罕,依靠部署在各地的邊緣服務(wù)器止潮,通過中心平臺的負載均衡 、 內(nèi)容分發(fā) 闻坚、 調(diào)度等功能模塊沽翔,使用戶就近獲取所需內(nèi)容,降低網(wǎng)絡(luò)擁塞窿凤,提高用戶訪問響應(yīng)速度和命中率 仅偎。
這些標簽加載資源時,瀏覽器會發(fā)起 Get 請求雳殊,獲取這些資源橘沥。但在加載 JavaScript 時,限制了讀寫返回內(nèi)容的權(quán)限夯秃。
3 XMLHttpRequest 對象
XMLHttpRequest 對象可以與服務(wù)器交換數(shù)據(jù)座咆。具體功能如下:
- 在不重新加載頁面的情況下更新網(wǎng)頁。
- 在頁面已加載后從服務(wù)器請求數(shù)據(jù)仓洼。
- 在頁面已加載后從服務(wù)器接收數(shù)據(jù)介陶。
- 在后臺向服務(wù)器發(fā)送數(shù)據(jù)。
為了安全起見色建,XMLHttpRequest 對象哺呜,在默認情況下,不能跨域訪問資源箕戳,所以在 Ajax 開發(fā)中一定要注意哦O(∩_∩)O~
4 XMLHttpRequest 跨域訪問標準
瀏覽器會通過目標域所返回的 HTTP 頭(Access-Control-Allow-Origin)來判定是否允許跨域訪問某残,因為 JavaScript 無法操縱 HTTP 頭国撵。