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