如題,本文主要介紹兩方面內容:首先簡單介紹瀏覽器的同源策略與其帶來的問題;其次,介紹Cookie的做用域,即Cookie與Domain(域名)的上傳關係,即瀏覽器在何時提交什麼Cookie到服務器,即瀏覽器是經過怎樣的規則篩選Cookie並提交到服務器的。html
1、 瀏覽器同源策略
1995年,同源政策由 Netscape 公司引入瀏覽器。目前,全部瀏覽器都實行這個政策。最初,它的含義是指,A網頁設置的 Cookie,B網頁不能打開,除非這兩個網頁"同源"。所謂"同源"指的是"三個相同":前端
舉例來講,http://www.example.com/dir/page.html這個網址,協議是http://,域名是www.example.com,端口是80(默認端口能夠省略)。它的同源狀況以下:java
同源政策的目的,是爲了保證用戶信息的安全,防止惡意的網站竊取數據。設想這樣一種狀況:A網站是一家銀行,用戶登陸之後,又去瀏覽其餘網站。若是其餘網站能夠讀取A網站的 Cookie,會發生什麼?後端
很顯然,若是 Cookie包含隱私(好比存款總額),這些信息就會泄漏。更可怕的是,Cookie 每每用來保存用戶的登陸狀態,若是用戶沒有退出登陸,其餘網站就能夠冒充用戶,隨心所欲。由於瀏覽器同時還規定,提交表單不受同源政策的限制。因而可知,"同源政策"是必需的,不然Cookie 能夠共享,互聯網就毫無安全可言了。跨域
隨着互聯網的發展,"同源政策"愈來愈嚴格。目前,若是非同源,共有三種行爲受到限制:瀏覽器
雖然這些限制是必要的,可是有時很不方便,合理的用途也受到影響。例如,我同一個站點的兩個不一樣域名不能共享Cookie;再例如,個人前端頁面項目的域名與我後端Jetty服務的域名不一樣,那麼我就沒法發送Ajax請求來訪問Jetty服務,等等。安全
也就是說同源策略會帶來一系列跨域訪問的問題,以後的文章咱們會介紹如何來規避這些問題,主要介紹JSONP與CORS兩種方案。服務器
2、 Cookie做用域
Cookie,顧名思義,小甜心,少食便可,多吃無益。主要是經過瀏覽器保存在客戶端的一些安全性要求不高的臨時數據。ide
Cookie有兩個很重要的屬性:Domain和Path,用來指示此Cookie的做用域:網站
Domain告訴瀏覽器當前要添加的Cookie的域名歸屬,若是沒有明確指明則默認爲當前域名,好比經過訪問www.vinceruan.info添加的Cookie的域名默認就是www.vinceruan.info,經過訪問blog.vinceruan.info所生成的Cookie的域名就是blog.vinceruan.info。
Path告訴瀏覽器當前要添加的Cookie的路徑歸屬,若是沒有明確指明則默認爲當前路徑,好比經過訪問www.vinceruan.info/java/hotspot.html添加的Cookie的默認路徑就是/java/,經過blog.vinceruan.info/java/hotspot.html生成的Cookie的路徑也是/java/。
瀏覽器提交的Cookie須要知足如下兩點: 1.當前域名或者父域名下的Cookie;2.當前路徑或父路徑下的Cookie。要知足以上兩個條件的Cookie纔會被提交。舉個例子:有4個Cookie:
當我訪問blog.vinceruan.info時:
這裏須要注意的是, 在瀏覽器看來. www.vinceruan.info不是blog.vinceruan.info的父域名,而vinceruan.info纔是blog.vinceruan.info的父域名, www.vinceruan.info也算是一個二級域名(這點若是你提交過域名到DNS服務器商的應該會知道,通常咱們須要顯式提交www.vinceruan.info和vinceruan.info, 不然www.vinceruan.info==vinceruan.info是不成立的).
因此若是咱們須要在全部二級域名下共享islogin=1的Cookie,用java代碼以下:
若是要在全部的二級域名下的/java/路徑下共享silogin=1的Cookie,用java代碼以下:
上面介紹了瀏覽器具備同源策略:協議相同、域名相同、端口相同,而由此也帶來了一系列的跨域資源訪問問題。還介紹了瀏覽器篩選Cookie並提交到服務器的規則:當前域名或者父域名下的而且是當前路徑或父路徑下的Cookie纔會被提交到服務器。