Cookie 的规范介绍
目前有以下幾種 Cookie 規范:
- Netscape cookie 草案:是最早的 cookie 規范,基于 rfc2109。盡管這個規范與 rc2109 有較大的差別,但是很多服務器都與之兼容。
- rfc2109, 是 w3c 發布的第一個官方 cookie 規范。理論上講,所有的服務器在處理 cookie( 版本 1) 時,都要遵循此規范。遺憾的是,這個規范太嚴格了,以致很多服務器不正確的實施了該規范或仍在使用 Netscape 規范。
- rfc2965 規范定義了 cookie 版本 2,并說明了 cookie 版本 1 的不足。
rfc2965 規范的使用,目前并不多。rfc2109 規范相應要嚴格得多,在實際應用上,并不是所有的瀏覽器和 Web 服務器都嚴格遵守。因此相比較而言,Netscape cookie 草案倒是一個比較簡潔和被廣泛支持的 Cookie 規范,因此我們在這里以 Netscape cookie 草案為基礎進行討論,對于其他兩種規范,我們的討論和代碼具有相同的意義。關于 Netscape cookie 草案的細節,大家可以參照 Netscape 官方站點,這里我們列舉一些和我們討論有關的內容。
根據 Netscape cookie 草案的描述,Cookie 是 Web 服務器向用戶的瀏覽器發送的一段 ASCII 碼文本。一旦收到 Cookie,瀏覽器會把 Cookie 的信息片斷以"名 / 值"對 (name-value pairs) 的形式儲存保存在本地。這以后,每當向同一個 Web 服務器請求一個新的文檔時,Web 瀏覽器都會發送之站點以前存儲在本地的 Cookie。創建 Cookie 的最初目的是想讓 Web 服務器能夠通過多個 HTTP 請求追蹤客戶。有些復雜的網絡應用需要在不同的網頁之間保持一致,它們需要這種會話狀態的保持能力。
瀏覽器與 Web 服務器通過 HTTP 協議進行通訊,而 Cookie 就是保存在 HTTP 協議的請求或者應答頭部(在 HTTP 協議中,數據包括兩部分,一部分是頭部,由一些名值對構成,用來描述要被傳輸數據的一些信息。一部分是主體 (body),是真正的數據(如 HTML 頁面等))進行傳送的。
在 HTML 文檔被發送之前,Web 服務器通過傳送 HTTP 包頭中的 Set-Cookie 消息把一個 cookie 發送到用戶的瀏覽器中。下面是一個遵循 Netscape cookie 草案的完整的 Set-Cookie 頭:
| Set-Cookie:customer=huangxp; path=/foo; domain=.ibm.com; expires= Wednesday, 19-OCT-05 23:12:40 GMT; [secure] |
Set-Cookie 的每個屬性解釋如下:
- Customer=huangxp 一個"名稱=值"對,把名稱 customer 設置為值"huangxp",這個屬性在 Cookie 中必須有。
- path=/foo 控制哪些訪問能夠觸發 cookie 的發送。如果沒有指定 path,cookie 會在所有對此站點的 HTTP 傳送時發送。如果 path=/directory,只有訪問 /directory 下面的網頁時,cookie 才被發送。在這個例子中,用戶在訪問目錄 /foo 下的內容時,瀏覽器將發送此 cookie。如果指定了 path,但是 path 與當前訪問的 url 不符,則此 cookie 將被忽略。
- domain=.ibm.com 指定 cookie 被發送到哪臺計算機上。正常情況下,cookie 只被送回最初向用戶發送 cookie 的計算機。在這個例子中,cookie 會被發送到任何在 .ibm.com 域中的主機。如果 domain 被設為空,domain 就被設置為和提供 cookie 的 Web 服務器相同。如果 domain 不為空,并且它的值又和提供 cookie 的 Web 服務器域名不符,這個 Cookie 將被忽略。
- expires= Wednesday, 19-OCT-05 23:12:40 GMT 指定 cookie 失效的時間。如果沒有指定失效時間,這個 cookie 就不會被寫入計算機的硬盤上,并且只持續到這次會話結束。
- secure 如果 secure 這個詞被作為 Set-Cookie 頭的一部分,那么 cookie 只能通過安全通道傳輸(目前即 SSL 通道)。否則,瀏覽器將忽略此 Cookie。
一旦瀏覽器接收了 cookie,這個 cookie 和對遠端 Web 服務器的連續請求將一起被瀏覽器發送。例如 前一個 cookie 被存入瀏覽器并且瀏覽器試圖請求 URL http://www.ibm.com/foo/index.html 時,下面的 HTTP 包頭就被發送到遠端的 Web 服務器。
GET /foo/index.html HTTP/1.0
Cookie:customer=huangxp
一次典型的網絡瀏覽過程
在了解了 Cookie 協議的一些基本內容之后,讓我們看看一次典型的網絡瀏覽過程中瀏覽器如何識別和處理 Cookie:
- 瀏覽器對于 Web 服務器應答包頭中 Cookie 的操作步驟:
1. 從 Web 服務器的應答包頭中提取所有的 cookie。
2. 解析這些 cookie 的組成部分(名稱,值,路徑等等)。
3. 判定主機是否允許設置這些 cookie。允許的話,則把這些 Cookie 存儲在本地。 - 瀏覽器對 Web 服務器請求包頭中所有的 Cookie 進行篩選的步驟:
1. 根據請求的 URL 和本地存儲 cookie 的屬性,判斷那些 Cookie 能被發送給 Web 服務器。
2. 對于多個 cookie,判定發送的順序。
3. 把需要發送的 Cookie 加入到請求 HTTP 包頭中一起發送。
- 瀏覽器對于 Web 服務器應答包頭中 Cookie 的操作步驟:
轉載于:https://www.cnblogs.com/zcy_soft/archive/2013/03/14/2958793.html
總結
以上是生活随笔為你收集整理的Cookie 的规范介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高速缓冲存储器的功能、结构与工作原理
- 下一篇: BZOJ 1601 [Usaco2008