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