Http Cookie機制及Cookie的實現(xiàn)原理
1. 為什么需要Cookie?
HTTP是一種無狀態(tài)的協(xié)議,客戶端與服務(wù)器建立連接并傳輸數(shù)據(jù),數(shù)據(jù)傳輸完成后,連接就會關(guān)閉。再次交互數(shù)據(jù)需要建立新的連接,因此,服務(wù)器無法從連接上跟蹤會話,也無法知道用戶上一次做了什么。這嚴(yán)重阻礙了基于Web應(yīng)用程序的交互,也影響用戶的交互體驗。如:在網(wǎng)絡(luò)有時候需要用戶登錄才進一步操作,用戶輸入用戶名密碼登錄后,瀏覽了幾個頁面,由于HTTP的無狀態(tài)性,服務(wù)器并不知道用戶有沒有登錄。
Cookie是解決HTTP無狀態(tài)性的有效手段,服務(wù)器可以設(shè)置或讀取Cookie中所包含的信息。當(dāng)用戶登錄后,服務(wù)器會發(fā)送包含登錄憑據(jù)的Cookie到用戶瀏覽器客戶端,而瀏覽器對該Cookie進行某種形式的存儲(內(nèi)存或硬盤)。用戶再次訪問該網(wǎng)站時,瀏覽器會發(fā)送該Cookie(Cookie未到期時)到服務(wù)器,服務(wù)器對該憑據(jù)進行驗證,合法時使用戶不必輸入用戶名和密碼就可以直接登錄。
本質(zhì)上講,Cookie是一段文本信息??蛻舳苏埱蠓?wù)器時,如果服務(wù)器需要記錄用戶狀態(tài),就在響應(yīng)用戶請求時發(fā)送一段Cookie信息??蛻舳藶g覽器保存該Cookie信息,當(dāng)用戶再次訪問該網(wǎng)站時,瀏覽器會把Cookie做為請求信息的一部分提交給服務(wù)器。服務(wù)器檢查Cookie內(nèi)容,以此來判斷用戶狀態(tài),服務(wù)器還會對Cookie信息進行維護,必要時會對Cookie內(nèi)容進行修改。
2. Cookie的類型
Cookie總時由用戶客戶端進行保存的(一般是瀏覽器),按其存儲位置可分為:內(nèi)存式Cookie和硬盤式Cookie。
內(nèi)存式Cookie存儲在內(nèi)存中,瀏覽器關(guān)閉后就會消失,由于其存儲時間較短,因此也被稱為非持久Cookie或會話Cookie。
硬盤式Cookie保存在硬盤中,其不會隨瀏覽器的關(guān)閉而消失,除非用戶手工清理或到了過期時間。由于硬盤式Cookie存儲時間是長期的,因此也被稱為持久Cookie。
3. Cookie的實現(xiàn)原理
Cookie定義了一些HTTP請求頭和HTTP響應(yīng)頭,通過這些HTTP頭信息使服務(wù)器可以與客戶進行狀態(tài)交互。
客戶端請求服務(wù)器后,如果服務(wù)器需要記錄用戶狀態(tài),服務(wù)器會在響應(yīng)信息中包含一個Set-Cookie的響應(yīng)頭,客戶端會根據(jù)這個響應(yīng)頭存儲Cookie信息。再次請求服務(wù)器時,客戶端會在請求信息中包含一個Cookie請求頭,而服務(wù)器會根據(jù)這個請求頭進行用戶身份、狀態(tài)等較驗。
下面是一個實現(xiàn)Cookie機制的,簡單的HTTP請求過程:
1. 客戶端請求服務(wù)器
客戶端請求IT筆錄網(wǎng)站首頁,請求頭如下:
GET / HTTP/1.0
HOST:itbilu.com
2. 服務(wù)器響應(yīng)請求
Cookie是一種key=value形式的字符串,服務(wù)器需要記錄這個客戶端請求的狀態(tài),因此在響應(yīng)頭中包一個Set-Cookie字段。響應(yīng)頭如下:
HTTP/1.0 200 OK
Set-Cookie:UserID=itbilu; Max-Age=3600; Version=1
Content-type:text/html
……
3. 再次請求時,客戶端請求中會包含一個Cookie請求頭
客戶端會對服務(wù)器響應(yīng)的Set-Cookie頭信息進行存儲。再次請求時,將會在請求頭中包含服務(wù)器響應(yīng)的Cookie信息。請求頭如下
GET / HTTP/1.0
HOST:itbilu.com
Cookie:UserID=itbilu
以上就是Http Cookie機制及Cookie的實現(xiàn)原理的詳細內(nèi)容,更多關(guān)于Http Cookie和Cookie實現(xiàn)原理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Security LDAP實現(xiàn)身份驗證的項目實踐
在本文中,我們涵蓋了“使用 Spring Boot 的 Spring Security LDAP 身份驗證示例”的所有理論和示例部分,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08Java環(huán)境變量的設(shè)置方法(圖文教程)
想要成功配置Java的環(huán)境變量,那肯定就要安裝JDK,才能開始配置的。2013-05-05解決bufferedReader.readLine()讀到最后發(fā)生阻塞的問題
這篇文章主要介紹了解決bufferedReader.readLine()讀到最后發(fā)生阻塞的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07深入淺出分析Java抽象類和接口【功能,定義,用法,區(qū)別】
這篇文章主要介紹了Java抽象類和接口,結(jié)合實例形式深入淺出的分析了java抽象類與接口的功能功能,定義,用法及區(qū)別,需要的朋友可以參考下2017-08-08PowerJob的IdGenerateService工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob的IdGenerateService工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01Java實現(xiàn)ftp文件上傳下載解決慢中文亂碼多個文件下載等問題
這篇文章主要介紹了Java實現(xiàn)ftp文件上傳下載解決慢中文亂碼多個文件下載等問題的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-10-10