前端學習筆記-8.5同源策略
最初,它的含義是指:A網頁設定的Cookie,B網頁不能開啟,除非這兩個網頁同源。
同源指的是: 協議相同, 域名相同, 埠相同。
同源政策的目的,是為了保證使用者資訊的安全,防止惡意的網站竊取資料。
隨著網際網路的發展,同源策略越來越嚴格,現在的同源指的是: Cookie、LocalStorage 和 IndexDB 無法讀取。 DOM 無法獲得。 AJAX 請求不能傳送。
Cookie Cookie 是伺服器寫入瀏覽器的一小段資訊,只有同源的網頁才能共享。但是,兩個網頁一級域名相同,只是二級域名不同,瀏覽器允許通過設定document.domain共享 Cookie。
例子: A網頁是http://w1.example.com/a.html, B網頁是http://w2.example.com/b.html, 那麼只要設定相同的document.domain,兩個網頁就可以共享Cookie。
document.domian = ‘example.com’; document.cookie = “test1=hello”; var allCookie = document.cookie; 這種方法只適用於 Cookie 和 iframe 視窗
本地儲存: Cookie:4k localStorage:5M,永久性儲存, sessionStorage:5M,暫時性,用完即銷燬 LocalStorage,SessionStorage用於Storage, 在HTML5中,新加入了一個localStorage特性,這個特性主要是用來作為本地儲存來使用的,解決了cookie儲存空間不足的問題(cookie中每條cookie的儲存空間為4k),localStorage中一般瀏覽器支援的是5M大小,這個在不同的瀏覽器中localStorage會有所不同。IE8以上。
JSONP JSONP,它有個限制,只能用GET請求,摒棄要求返回javascript。這種方式跨域實際上是利用了瀏覽器允許跨域引用javascript資源。 JSONP是伺服器與客戶端跨源通訊的常用方法。最大特點就是簡單適用,老式瀏覽器全部支援,伺服器改造非常小。
它的基本思想是,網頁通過新增一個script元素,向伺服器請求JSON資料,這種做法不受同源政策限制;伺服器收到請求後,將資料放在一個指定名字的回撥函式裡傳回來。
首先,網頁動態插入script元素,由它向跨源網址發出請求。
function addScriptTag(src) { var script = document.createElement(‘script’); script.setAttribute(“type”,“text/javascript”); script.src = src; document.body.appendChild(script); }
function foo(data) { console.log('Your public IP address is: ’ + data.ip); }; 上面程式碼通過動態新增script元素,向伺服器example.com發出請求。注意,該請求的查詢字串有一個callback引數,用來指定回撥函式的名字,這對於JSONP是必需的。
伺服器收到這個請求以後,會將資料放在回撥函式的引數位置返回。
foo({ “ip”: “192.168.45.145” }); 由於script元素請求的指令碼,直接作為程式碼執行。這時,只要瀏覽器定義了foo函式,該函式就會立即呼叫。作為引數的JSON資料被視為JavaScript物件,而不是字串,因此避免了使用JSON.parse的步驟