Cookie 本文重定向自 Cookie
HTTP/HTTPS |
---|
![]() |
版本 |
請求方法 |
報文主體 |
頭欄位 |
狀態碼 |
相關主題 |
HTTP cookie,簡稱cookie,是使用者瀏覽網站時由網路伺服器建立並由使用者的網頁瀏覽器存放在使用者電腦或其他裝置上的小文字檔案。
Cookie使Web伺服器能夠在使用者的裝置上儲存狀態資訊(如添加到線上商店購物車中的商品)或跟蹤使用者的瀏覽活動(如點擊特定按鈕、登入或記錄歷史)。
歷史
「cookie」一詞由網路瀏覽器程式設計師盧·蒙特利創造,源自「magic cookie」(1979年就已經出現,當時指UNIX程式收發的封包)。「magic cookie」這個詞本身來源於幸運餅乾。
盧·蒙特利在1994年6月想到這個點子的時候正在網景工作,公司則正在為MCI開發電子商務應用程式。文頓·瑟夫和約翰·克倫辛代表MCI與網景進行技術討論,表示不希望總是由其伺服器儲存事務狀態,而要求網景將狀態儲存在使用者的電腦中。Cookies便是網景提出的解決方案。
同年,蒙特利與約翰·詹南德雷亞一起編寫了最初的網景cookie規範。1994年10月13日發布的網景領航員0.9beta版開始支援cookie。它公開的首次使用目的是檢查網景網站的存取者是否已經存取過該網站。蒙特利於1995年申請了cookie技術的專利,1998年獲批(US 5774670)。1995年10月發布的第2版Internet Explorer也宣布支援cookie。
當時,cookie並未為公眾所知,雖然預設使用者接受cookie,網站並不會通知使用者其存在。1996年2月12日,英國《金融時報》發表文章介紹cookie,使其為大眾所知。其潛在的隱私問題也引發了討論,1996年和1997年的美國聯邦貿易委員會兩次就cookie舉行聽證會。
網際網路工程任務組專門成立了一個工作小組以規範cookie的使用。布萊恩·貝倫多夫和大衛·克里斯托分別提出了兩個有關HTTP事務狀態的替代方案。但由克里斯托本人和蒙特利領導的小組很快決定還是使用網景規範。1996年2月,工作群組將第三方cookie確定為嚴重隱私威脅。該小組制定的規範RFC 2109最終於1997年2月發布,要求第三方cookie要麼根本不允許,要麼至少預設不啟用。
網景的cookie頭欄位為Set-Cookie,
RFC 2965添加了一個Set-Cookie2
頭欄位,即「RFC 2965 cookie」,但Set-Cookie2
很少使用,終於2011年4月的RFC 6265中棄用,已經沒有現代瀏覽器可以辨識Set-Cookie2
頭欄位。
結構
Cookie的基本結構包括:
- 名;
- 值;
- 各種屬性。
屬性
一個cookie可能有多個屬性,如Domain、Path、Expires、Max-Age、Secure、HttpOnly,例如:
HTTP/1.0 200 OKSet-Cookie: LSID=DQAAAK…Eaem_vYg; Path=/accounts; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnlySet-Cookie: HSID=AYQEVn…DKrdst; Domain=.foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; HttpOnlySet-Cookie: SSID=Ap4P…GTEq; Domain=foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly…
Domain和Path
Domain
和Path
屬性定義了cookie的範圍。它們告訴瀏覽器cookie屬於哪個網站。Cookies只能設定在當前資源的頂級域及其子域上。
如果伺服器未指定cookie的Domain
和Path
,則它們預設為所請求資源的域和路徑。
Expires和Max-Age
Expires
屬性定義了瀏覽器應該刪除cookie的時間,格式為Wdy, DD Mon YYYY HH:MM:SS GMT
,或者Wdy, DD Mon YY HH:MM:SS GMT
(其中YY大於或等於0並且小於等於69)。
此外,也可使用Max-Age
將cookie的過期時間設定為某一段時間之後(相對於瀏覽器接收cookie的時間而言)。但一些瀏覽器可能不支援Max-Age
,如Internet Explorer。
Secure和HttpOnly
Secure
屬性旨在將cookie加密,使瀏覽器僅通過安全/加密連接使用cookie。
HttpOnly
要求瀏覽器不要通過HTTP(和HTTPS)以外的管道使用cookie。這意味著無法通過客戶端手稿語言(尤其是JavaScript)存取cookie,因此無法通過跨站點指令碼攻擊輕易竊取。
分類
對談cookie
對談cookie僅在使用者瀏覽網站時臨時儲存。當使用者關閉瀏覽器後會自動過期或刪除。
永續性cookie
永續性cookie只在其建立者設定的特定日期後過期,期間一直有效。
安全cookie
安全cookie只能通過加密連接傳輸(即HTTPS)。它們不能通過未加密的連接傳輸(即HTTP)。這使得cookie不容易被盜。
用途
對談管理
雖然最初引入cookie是為了讓使用者在瀏覽網站時記錄他們想要購買的物品。但現在使用者購物車的內容通常儲存在伺服器的資料庫中,而不再是客戶端的cookie中。
當前對談cookie的常見用途是登入。當使用者存取網站的登入頁面時,Web伺服器通常會向客戶端傳送一個包含唯一交談識別碼符的cookie。當使用者成功登入時,伺服器會記住該特定交談識別碼符已經過身分驗證,並授予使用者存取其服務的權限。
個性化
許多網站使用cookie儲存使用者偏好相關設定,以對使用者進行個性化服務。
跟蹤
跟蹤cookie用於跟蹤記錄使用者的網路瀏覽習慣,比如使用者的購買習慣。
瀏覽器設定
大多數現代瀏覽器都支援cookie並允許使用者禁用它們。以下是常見選項:
- 完全啟用或禁用cookie,以便它們始終被接受或始終被阻止;
- 使用cookie管理器檢視和有選擇地刪除cookie;
- 徹底清除所有私人資料,包括cookie。
此外也存在用於管理cookie權限的附加元件。
安全性
隱私和第三方cookie
由於網頁可能第三方服務,所以使用一個網頁很可能會遇到第三方cookie(即所存取網頁之外其他伺服器的cookie)。RFC 2109和RFC 2965要求瀏覽器保護使用者隱私,預設不允許在伺服器之間共享cookie。但RFC 6265放寬。大多數瀏覽器只要第三方網站有合理的隱私政策申明,就預設允許第三方 cookie。
廣告是第三方cookie常見的使用場景,廣告公司藉此跟蹤使用者。網站應當使使用者知道有第三方cookie存在,不向消費者披露第三方cookie使用情況的網站運營商可能面臨法律風險。因此,一般網站都會在隱私或cookie政策中對其使用的第三方cookie作出說明。
Cookie竊取和連線劫持
很多網站使用cookie作為使用者的唯一識別碼,但如果網站使用cookie作為交談識別碼符,攻擊者就可以通過竊取受害者的全套cookie來冒充使用者的請求。