Http Cookies 和相關概念

Http Cookies 和相關概念

概述

Http 是一種無狀態的協議,而且最早的時候服務器無法通過某一個連接確定是哪一個客戶端連接上了服務器,所以Web開發者,通過改造Http協議,在Http協議增加了標誌客戶端的一些首部字段。

然而,IP地址可以一定程度上幫助服務器標誌客戶端,但是實際上存在以下一些情況(不完整列舉)

客戶端使用了代理吳服務器,這樣的話,訪問服務器的就是代理服務器的IP地址。
有些互聯網服務提供商給用戶分配的是動態IP,這樣的用戶每次登陸的IP可能不一致。
使用了互聯網安全防火牆,這些要通過網絡地址轉換,所以服務器拿到的IP也不是真實的客戶端IP地址。
Http代理和網關會打開一些原始的 Tcp連接,所以IP也不是真實的。

這裏寫圖片描述

前述:

沒有使用 Cookies 字段之前,實現Cookies類型功能的,又由誰來實現?下面就看一下這些相關的介紹。

Form 字段

包含了用戶的電子郵件地址,一般這個是隱私信息,不會用來標誌客戶端,我們參考具體的get 和 post 請求,可以看到都沒有使用 Form 這個字段

User-Agent 字段

這個字段是最常使用的字段,它標誌了客戶端的一些信息,例如客戶端瀏覽器類型相關信息(版本,內核等),還有操作系統信息

例如我通過火狐瀏覽器,百度搜索一個漢字,下面是我的請求體頭部的 User-Agent

“Mozilla/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0”

Referer 字段

這個字段記錄了客戶端從哪個網址跳轉到服務器,能記錄客戶端的訪問記錄。能夠記錄上一個頁面的 URL地址,能夠在一定程度上標誌客戶端。

Authorization 字段

服務器爲了標誌不同的客戶,可以通過要求客戶在登陸的時候,輸入賬號密碼,其實這就是最早的登陸。下面選取了《Http權威指南》的圖示來說明。

這裏寫圖片描述

首先是瀏覽器發起對服務器的訪問請求
服務器由於無法識別當前客戶,所以會返回 401 Login Required 的返回碼(也就是狀態碼,最常見的狀態碼是 200),並添加www-Authentication 首部,要求用戶登陸,瀏覽器這時候會顯示登陸框。(爲了不讓用戶重複登陸,瀏覽器會記住用戶的登陸信息,再下一次的同一站點訪問的時候,會自動加上登陸信息,例如你在某個頁面登陸了淘寶,然後在之前沒有登陸賬號的淘寶頁面刷新一下,就會發現自己處於登陸狀態)
在用戶登陸之後,會將登陸信息存儲在 請求體的頭部的 Authorization 字段中,然後在整個會話期間,都保存這個登陸信息。(關閉瀏覽器會話結束)

tip:這個字段可以很好的解決用戶多次登陸的問題,但是如果你在瀏覽器訪問多個站點,多個站點使用了不同的賬號密碼,這樣的話,這個字段就不能幫助我們解決多個站點的登陸問題。

另外在後來的發展中,服務器可以通過特定的 URL 來區分不同客戶,具體的實現機制是在,客戶端訪問完服務器之後,給特定的 URL 加上不同的後綴。這種URL成爲 胖 URL。

Cookies 來了

然而,隨着技術的發展,上面的字段用來標誌用戶都不太合適,所以Web開發者,就使用了一種全新的字段,Cookies 字段。Cookies 是識別當前用戶和保持長久會話的最好字段,同時 Cookies 也影響了緩存,另外大部分瀏覽器不允許直接緩存 Cookies。

Cookies 類型

會話 Cookie 和持久 Cookie

會話 Cookie是一種臨時 Cookie,它記錄了用戶訪問站點時的偏好的設置,會話 Cookies 也是一種臨時 Cookies,用戶在退出瀏覽器的時候,會話Cookies就會被刪除了。但是持久Cookies是保存在硬盤上的,只要用戶不去手動清除就不會受到影響。

然後兩種 Cookies 的唯一區別是,它們的過期時間。通過設置 Discard 參數 或者不設置 Expires 或者 Max-Age 將作爲會話 Cookies 對待。

下圖展示了服務器添加 Cookies 的簡單過程

這裏寫圖片描述

Cookies的屬性

cookies 的域屬性
你可以在Cookies 中添加一個 Domain 屬性來控制那些站點不能看到這個 Cookies。例如,下面一種示例

這裏寫圖片描述

這裏面的話,只會將 Cookies 數值 user=”mary17” 發送給站點爲 domain 裏面數值的服務器。

Cookies 的路徑屬性

Cookies 屬性中的 path 屬性允許 Cookies 和特定的 Web服務器聯繫起來,這個屬性下列出來的所有 URL前綴都會拿到這個 Cookies。例如

這裏寫圖片描述

版本 0,又稱爲 Netscape cookies
版本 1,又稱爲 RFC 2965 Cookies

tip:這兩個 Cookies 成分都不是作爲 Http 1.1 的規範,而是一種擴展使用。

下面具體介紹一下這兩個版本的詳細信息

版本 0
這裏寫圖片描述
這裏寫圖片描述

版本 1
這裏寫圖片描述
這裏寫圖片描述

關於後續 Cookies 在客戶端的使用,會後續給出文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章