作者: 懿 來自:Java極客技術
圖中的 a 段 ,當我們在第一次訪問 Web 網站的時候, Web 服務器對我們現在過去的用戶信息一無所知。
Web 服務器希望這個用戶會再次回來,所以想給這個用戶“拍上”一個獨有的 cookie,這樣以後它就可以識別出這個用戶了。cookie 中包含了一個由名字 = 值(name=value)這樣的信息構成的 任意列表,並通過 Set-Cookie 或 Set-Cookie2 HTTP 響應(擴展)首部將其貼到用戶身上去。
但是 Cookie 中能存儲的信息,絕對不會只是 ID 號,相信大家做開發的,也肯定知道 Cookie 能存什麽,比如說,
Cookie: name=”Brian Totty”; phone=”555-1212″
我存了個這東西,它也是允許的。
浏覽器會記住從服務器返回的 Set-Cookie 或 Set-Cookie2 首部中的 Cookie 內容,並將 Cookie 集存儲在浏覽器的 Cookie 數據庫中(把它當作一個貼有不同國家貼紙的旅行箱)。將來用戶返回同一站點時圖中的 c 段,浏覽器會挑中那個服務器貼到用戶上的那些 Cookie,並在一個 Cookie 請求首部中將其傳回去。
這就是 Cookie 的工作原理,Cookie 就像服務器給用戶貼的“嗨,我叫”的貼紙一樣。用戶訪問一個 Web 站點時,這個 Web 站點就可以讀取那個服務器貼在用戶身上的所有貼紙。
4.Cookie罐
說實話哈,我在看到這個名詞的時候,第一反應就是,翻譯書籍的作者,有點懵人呀,直接這麽翻譯,不太負責任呀,後來發現,這麽翻譯,確實也是有一定道理的,原因如下:
因爲 Cookie 的基本思想就是讓浏覽器積累一組服務器特有的信息,每次訪問服務器時都將這些信息提供給它。浏覽器內部的 Cookie 罐總可以有成百上千個 Cookie,也是因爲浏覽器要負責存儲 Cookie 信息,所以此系統被稱爲客戶端側狀態 (client-side state)。這個 Cookie 規範的正式名稱爲 HTTP 狀態管理機制(HTTP state management mechanism)。
我猜測因爲它能夠存儲如此多的 Cookie ,所以當時書中的作者就翻譯成了 Cookie 罐,這麽想起來,也是很有道理的。