Http Cookie機制及Cookie的實現原理

1. 為什麼需要Cookie?

HTTP是一種無狀態的協議,客戶端與服務器建立連接並傳輸數據,數據傳輸完成後,連接就會關閉。再次交互數據需要建立新的連接,因此,服務器無法從連接上跟蹤會話,也無法知道用戶上一次做瞭什麼。這嚴重阻礙瞭基於Web應用程序的交互,也影響用戶的交互體驗。如:在網絡有時候需要用戶登錄才進一步操作,用戶輸入用戶名密碼登錄後,瀏覽瞭幾個頁面,由於HTTP的無狀態性,服務器並不知道用戶有沒有登錄。

Cookie是解決HTTP無狀態性的有效手段,服務器可以設置或讀取Cookie中所包含的信息。當用戶登錄後,服務器會發送包含登錄憑據的Cookie到用戶瀏覽器客戶端,而瀏覽器對該Cookie進行某種形式的存儲(內存或硬盤)。用戶再次訪問該網站時,瀏覽器會發送該Cookie(Cookie未到期時)到服務器,服務器對該憑據進行驗證,合法時使用戶不必輸入用戶名和密碼就可以直接登錄。

本質上講,Cookie是一段文本信息。客戶端請求服務器時,如果服務器需要記錄用戶狀態,就在響應用戶請求時發送一段Cookie信息。客戶端瀏覽器保存該Cookie信息,當用戶再次訪問該網站時,瀏覽器會把Cookie做為請求信息的一部分提交給服務器。服務器檢查Cookie內容,以此來判斷用戶狀態,服務器還會對Cookie信息進行維護,必要時會對Cookie內容進行修改。

2. Cookie的類型

Cookie總時由用戶客戶端進行保存的(一般是瀏覽器),按其存儲位置可分為:內存式Cookie和硬盤式Cookie

內存式Cookie存儲在內存中,瀏覽器關閉後就會消失,由於其存儲時間較短,因此也被稱為非持久Cookie或會話Cookie。

硬盤式Cookie保存在硬盤中,其不會隨瀏覽器的關閉而消失,除非用戶手工清理或到瞭過期時間。由於硬盤式Cookie存儲時間是長期的,因此也被稱為持久Cookie。

3. Cookie的實現原理

Cookie定義瞭一些HTTP請求頭和HTTP響應頭,通過這些HTTP頭信息使服務器可以與客戶進行狀態交互。

客戶端請求服務器後,如果服務器需要記錄用戶狀態,服務器會在響應信息中包含一個Set-Cookie的響應頭,客戶端會根據這個響應頭存儲Cookie信息。再次請求服務器時,客戶端會在請求信息中包含一個Cookie請求頭,而服務器會根據這個請求頭進行用戶身份、狀態等較驗。

下面是一個實現Cookie機制的,簡單的HTTP請求過程:

1. 客戶端請求服務器

客戶端請求IT筆錄網站首頁,請求頭如下:

GET / HTTP/1.0

HOST:itbilu.com

2. 服務器響應請求

Cookie是一種key=value形式的字符串,服務器需要記錄這個客戶端請求的狀態,因此在響應頭中包一個Set-Cookie字段。響應頭如下:

HTTP/1.0 200 OK

Set-Cookie:UserID=itbilu; Max-Age=3600; Version=1

Content-type:text/html

……

3. 再次請求時,客戶端請求中會包含一個Cookie請求頭

客戶端會對服務器響應的Set-Cookie頭信息進行存儲。再次請求時,將會在請求頭中包含服務器響應的Cookie信息。請求頭如下

GET / HTTP/1.0

HOST:itbilu.com

Cookie:UserID=itbilu

以上就是Http Cookie機制及Cookie的實現原理的詳細內容,更多關於Http Cookie和Cookie實現原理的資料請關註WalkonNet其它相關文章!

推薦閱讀: