同源策略含義:
同源政策由 Netscape 公司引入瀏覽器。目前,所有瀏覽器都實行這個政策。所謂“同源”指的是“三個相同”:協議,域名,端口(這點可以忽略)
注意,標准規定端口不同的網址不是同源(比如8000端口和8001端口不是同源),但是瀏覽器沒有遵守這條規定。實際上,同一個網域的不同端口,是可以互相讀取 Cookie 的。
同源策略目的:
為了保證用戶信息的安全,防止惡意的網站竊取數據。
設想這樣一種情況:A 網站是一家銀行,用戶登錄以后,A 網站在用戶的機器上設置了一個 Cookie,包含了一些隱私信息。用戶離開 A 網站以后,又去訪問 B 網站,如果沒有同源限制,B 網站可以讀取 A 網站的 Cookie,那么隱私就泄漏了。更可怕的是,Cookie 往往用來保存用戶的登錄狀態,如果用戶沒有退出登錄,其他網站就可以冒充用戶,為所欲為。因為瀏覽器同時還規定,提交表單不受同源政策的限制。
由此可見,同源政策是必需的,否則 Cookie 可以共享,互聯網就毫無安全可言了。
如果是非同源,限制范圍:
(1) 無法讀取非同源網頁的 Cookie、LocalStorage 和 IndexedDB(補充:IndexedDB提供了類似數據庫風格的數據存儲和使用方式,IndexedDB很適合存儲大量數據,它的API是異步調用的。IndexedDB使用索引存儲數據)
(2) 無法接觸非同源網頁的 DOM。
(3) 向非同源地址發送 AJAX 請求瀏覽器會拒絕響應。
不同源如何拿到Cookie?
Cookie 是服務器寫入瀏覽器的一小段信息,只有同源的網頁才能共享。如果兩個網頁一級域名相同,只是次級域名不同,瀏覽器允許通過設置document.domain
共享 Cookie。
注意,這種方法只適用於 Cookie 和 iframe 窗口
不同源怎么發送AJAX請求?
同源政策規定,AJAX 請求只能發給同源的網址,否則就報錯。
除了架設服務器代理(瀏覽器請求同源服務器,再由后者請求外部服務),有三種方法規避這個限制:JSONP,WebSocket , CORS