HTTP Cookie
| 英文名 | HTTP cookie[1] |
|---|---|
| 別名 | Web cookie、瀏覽器cookie、數碼存根、小型文本文件、小甜餅[2][3] |
| 發明者 | 盧·蒙特利(Lou Montulli)[4][5] |
| 發明時間 | 1994年6月[4] |
| 首次實現 | 網景導航者0.9beta版(1994年10月13日)[5][6] |
| 相關標準 | RFC 6265[7] |
| 類型 | 狀態管理機制、HTTP標頭[8] |
HTTP Cookie(又稱Web cookie、瀏覽器cookie,中文俗稱數碼存根、小型文本文件或小甜餅)是伺服器發送給用戶網頁瀏覽器的一小段數據[1][2]。瀏覽器可以存儲這些數據,並在之後的請求中將其發送回同一伺服器[1][8]。Cookie使原本無狀態的HTTP協議能夠維持狀態信息,從而讓Web伺服器能夠在用戶的設備上存儲會話狀態(如購物車內容)或跟蹤用戶的瀏覽活動(如登錄狀態或頁面訪問記錄)[2][8]。該技術由網景員工盧·蒙特利於1994年發明[4][5],首次實現於1994年10月13日發布的網景導航者0.9beta版[5][6]。Cookie現已成為Web的基礎技術之一,被所有主流瀏覽器所支持[5]。
「Cookie」一詞由網景瀏覽器程式設計師盧·蒙特利(Lou Montulli)創造,其源頭可追溯至1979年就已出現的UNIX程序「magic cookie」——指程序收發的數據包[2]。而「magic cookie」一詞本身則源自幸運餅(fortune cookie)[2]。
1994年6月,蒙特利在網景工作時想到了將cookie概念應用於Web通信的點子[2][9]。當時網景正為MCI開發電子商務應用程式,MCI方面不希望總是由其伺服器保存事務狀態,要求網景將狀態存儲在用戶計算機上,Cookie便是網景提出的解決方案[2]。同年,蒙特利與約翰·詹南德雷亞(John Giannandrea)一起編寫了最初的網景Cookie規範[2][9]。
1994年10月13日,網景導航者(Netscape Navigator)0.9beta版發布,成為首個支持Cookie的瀏覽器[6][10]。其公開的首次使用目的是檢查網景網站的訪問者是否已經訪問過該網站[2]。蒙特利於1995年申請了Cookie技術的專利[2]。
此後,所有主流瀏覽器逐漸開始支持Cookie[5][9]。1997年,RFC 2109首次對Cookie機制進行了標準化定義[3]。2011年發布的RFC 6265取代了RFC 2109和RFC 2965,成為當前Cookie的正式標準[7]。
HTTP協議本身是無狀態(stateless)的,即伺服器對每個請求的處理相互獨立,不保留之前請求的任何信息[1][11]。Cookie機制繞開了HTTP的無狀態特性,為伺服器提供了一種識別和記憶用戶的手段[11]。
- 設置Cookie:當用戶訪問一個網站時,伺服器可以在HTTP響應中包含一個`Set-Cookie`標頭,向瀏覽器發送一小段數據[12]。
- 存儲Cookie:瀏覽器接收到響應後,會根據標頭中的指令存儲該Cookie,包括其名稱、值、過期時間、域名、路徑等屬性[1]。
- 發送Cookie:在用戶之後向同一伺服器發起請求時,瀏覽器會自動在HTTP請求中包含`Cookie`標頭,將之前存儲的Cookie數據發送回伺服器[13]。
- 伺服器識別:伺服器通過讀取Cookie標頭中的信息,即可識別用戶的身份或狀態,從而提供個性化或持續性的服務[1]。
- 會話管理(Session management):用於維護用戶的登錄狀態、購物車內容、遊戲分數等會話相關信息。用戶登錄後,伺服器通過一個包含會話ID(Session ID)的Cookie來識別用戶,使其在不同頁面間無需重複登錄[1][8]。
- 個性化設置(Personalization):用於存儲用戶的偏好設置,如界面語言、主題、字體大小等[1]。
- 跟蹤(Tracking):用於記錄和分析用戶的行為,例如點擊了哪些按鈕、瀏覽了哪些頁面。第三方跟蹤Cookie常被用於跨站點收集用戶瀏覽歷史,以用於定向廣告投放[8]。
根據來源和生命周期,Cookie可分為以下類別:
- 會話Cookie(Session cookie):僅在瀏覽器會話期間存在,關閉瀏覽器後即被刪除。不設置過期時間(Expires)或最大存活時間(Max-Age)的Cookie即為會話Cookie[1]。
- 持久Cookie(Persistent cookie):設置了過期時間或最大存活時間,在到期前會一直存儲在用戶設備上,即使關閉瀏覽器也不會丟失[1]。
- 第一方Cookie(First-party cookie):由用戶當前訪問的網站所設置的Cookie[8]。
- 第三方Cookie(Third-party cookie):由當前訪問網站之外的第三方(如廣告網絡)通過嵌入內容(如廣告或圖片)所設置的Cookie,常用於跨站點跟蹤用戶行為[8]。
Cookie技術自誕生以來,其私隱和安全問題一直備受關注[8]。
- 安全風險:Cookie可能被攻擊者通過跨站腳本(XSS)攻擊竊取,或用於跨站請求偽造(CSRF)攻擊[8]。為增強安全性,Cookie可設置`Secure`標誌(僅通過HTTPS傳輸)和`HttpOnly`標誌(禁止JavaScript訪問)[12][1]。
- 私隱問題:第三方跟蹤Cookie能夠跨站點記錄用戶的瀏覽歷史,引發了對用戶私隱的廣泛擔憂[8]。歐盟的《通用數據保護條例》(GDPR)和ePrivacy指令等法規要求網站在使用非必要Cookie時必須獲得用戶的知情同意[8]。近年來,主流瀏覽器(如Safari、Firefox)已開始逐步限制或淘汰第三方Cookie[8]。
Cookie的標準化歷程如下:
- 1997年:RFC 2109 —— 首次對Cookie進行標準化定義[3]。
- 2000年:RFC 2965 —— 對RFC 2109進行了修訂,增加了對HTTP狀態管理機制的詳細說明[3]。
- 2011年:RFC 6265 —— 取代RFC 2109和RFC 2965,成為當前HTTP Cookie的正式標準,定義了`Set-Cookie`和`Cookie`標頭的語法與行為[7]。
- ↑ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 使用 HTTP Cookie — MDN Web Docs
- ↑ 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 Cookie — 維基百科
- ↑ 3.0 3.1 3.2 3.3 Cookie — 維基百科(存檔)
- ↑ 4.0 4.1 4.2 Cookie — 維基百科
- ↑ 5.0 5.1 5.2 5.3 5.4 5.5 網景 — 百度百科
- ↑ 6.0 6.1 6.2 Cookie — 維基百科
- ↑ 7.0 7.1 7.2 使用 HTTP Cookie — MDN Web Docs
- ↑ 8.00 8.01 8.02 8.03 8.04 8.05 8.06 8.07 8.08 8.09 8.10 8.11 8.12 8.13 HTTP cookie — Wikipedia
- ↑ 9.0 9.1 9.2 cookie 的起源 — W3Cschool
- ↑ Cookies:被妖魔化的在線私隱威脅 — ZOL新聞
- ↑ 11.0 11.1 解讀爬蟲中HTTP的秘密(高階篇) — 騰訊雲
- ↑ 12.0 12.1 Set-Cookie — MDN Web Docs
- ↑ Cookie — MDN Web Docs