HTTP Cookie:修订间差异
TeodoroSeccombe(留言 | 贡献) 小 创建页面,内容为“。” |
IdleTap-bot(留言 | 贡献) 由旧格式Infobox转换为新参数格式(label/data),修复空信息框(由IdleTap-bot执行) |
||
| 第1行: | 第1行: | ||
# | {{Infobox | ||
| title = HTTP Cookie | |||
| label1 = 英文名 | |||
| data1 = HTTP cookie<ref name=":0" /> | |||
| label2 = 别名 | |||
| data2 = Web cookie、浏览器cookie、数码存根、小型文本文件、小甜餅<ref name=":1" /><ref name=":2" /> | |||
| label3 = 发明者 | |||
| data3 = [[卢·蒙特利]](Lou Montulli)<ref name=":3" /><ref name=":4" /> | |||
| label4 = 发明时间 | |||
| data4 = 1994年6月<ref name=":3" /> | |||
| label5 = 首次实现 | |||
| data5 = [[网景导航者]]0.9beta版(1994年10月13日)<ref name=":4" /><ref name=":5" /> | |||
| label6 = 相关标准 | |||
| data6 = RFC 6265<ref name=":6" /> | |||
| label7 = 类型 | |||
| data7 = 状态管理机制、[[HTTP]]标头<ref name=":7" /> | |||
}}'''HTTP Cookie'''(又称'''Web cookie'''、'''[[浏览器]]cookie''',中文俗称'''数码存根'''、'''小型[[文本]]文件'''或'''小甜餅''')是[[服务器]]发送给[[用户]][[网页浏览器]]的一小段[[数据]]<ref name=":0">[https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Guides/Cookies 使用 HTTP Cookie — MDN Web Docs]</ref><ref name=":1">[https://zh.wikipedia.org/wiki/Cookie Cookie — 维基百科]</ref>。浏览器可以[[存储]]这些数据,并在之后的请求中将其发送回同一服务器<ref name=":0" /><ref name=":7">[[wikipedia:HTTP_cookie|HTTP cookie — Wikipedia]]</ref>。Cookie使原本[[无状态协议|无状态]]的[[HTTP]]协议能够维持状态信息,从而让Web服务器能够在用户的设备上存储会话状态(如购物车内容)或跟踪用户的浏览活动(如登录状态或页面访问记录)<ref name=":1" /><ref name=":7" />。该技术由[[网景通信公司|网景]]员工[[卢·蒙特利]]于1994年发明<ref name=":3">[https://zh.wikipedia.org/wiki/Cookie Cookie — 维基百科]</ref><ref name=":4">[https://baike.baidu.com/item/%E7%BD%91%E6%99%AF 网景 — 百度百科]</ref>,首次实现于1994年10月13日发布的[[网景导航者]]0.9beta版<ref name=":4" /><ref name=":5">[https://zh.wikipedia.org/wiki/Cookie Cookie — 维基百科]</ref>。Cookie现已成为Web的基础技术之一,被所有主流浏览器所支持<ref name=":4" />。 | |||
== 历史 == | |||
“Cookie”一词由网景浏览器程序员[[卢·蒙特利]](Lou Montulli)创造,其源头可追溯至1979年就已出现的UNIX程序“magic cookie”——指程序收发的数据包<ref name=":1" />。而“magic cookie”一词本身则源自[[幸运饼]](fortune cookie)<ref name=":1" />。 | |||
1994年6月,蒙特利在[[网景通信公司|网景]]工作时想到了将cookie概念应用于Web通信的点子<ref name=":1" /><ref name=":8">[https://www.w3cschool.cn/cookie/cookie-origin.html cookie 的起源 — W3Cschool]</ref>。当时网景正为[[MC]]I开发电子商务应用程序,MCI方面不希望总是由其服务器保存事务状态,要求网景将状态存储在用户[[计算机]]上,Cookie便是网景提出的解决方案<ref name=":1" />。同年,蒙特利与约翰·詹南德雷亚(John Giannandrea)一起编写了最初的网景Cookie规范<ref name=":1" /><ref name=":8" />。 | |||
1994年10月13日,[[网景导航者]](Netscape Navigator)0.9beta版发布,成为首个支持Cookie的浏览器<ref name=":5" /><ref name=":9">[https://news.zol.com.cn/513/5134090.html Cookies:被妖魔化的在线隐私威胁 — ZOL新闻]</ref>。其公开的首次使用目的是检查网景网站的访问者是否已经访问过该网站<ref name=":1" />。蒙特利于1995年申请了Cookie技术的专利<ref name=":1" />。 | |||
此后,所有主流浏览器逐渐开始支持Cookie<ref name=":4" /><ref name=":8" />。1997年,[[RFC 2109]]首次对Cookie机制进行了标准化定义<ref name=":2">[https://web.archive.org/web/20091004044657/http://zh.wikipedia.org/wiki/Cookie Cookie — 维基百科(存档)]</ref>。2011年发布的[[RFC 6265]]取代了RFC 2109和RFC 2965,成为当前Cookie的正式标准<ref name=":6">[https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Guides/Cookies 使用 HTTP Cookie — MDN Web Docs]</ref>。 | |||
== 工作原理 == | |||
HTTP协议本身是[[无状态协议|无状态]](stateless)的,即服务器对每个请求的处理相互独立,不保留之前请求的任何信息<ref name=":0" /><ref name=":10">[https://cloud.tencent.com/developer/article/2182117 解读爬虫中HTTP的秘密(高阶篇) — 腾讯云]</ref>。Cookie机制绕开了HTTP的无状态特性,为服务器提供了一种识别和记忆用户的手段<ref name=":10" />。 | |||
Cookie的工作流程如下<ref name=":0" /><ref name=":7" />: | |||
# '''设置Cookie''':当用户访问一个网站时,服务器可以在HTTP响应中包含一个`Set-Cookie`标头,向浏览器发送一小段数据<ref name=":11">[https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie Set-Cookie — MDN Web Docs]</ref>。 | |||
# '''存储Cookie''':浏览器接收到响应后,会根据标头中的指令存储该Cookie,包括其名称、值、过期时间、域名、路径等属性<ref name=":0" />。 | |||
# '''发送Cookie''':在用户之后向同一服务器发起请求时,浏览器会自动在HTTP请求中包含`Cookie`标头,将之前存储的Cookie数据发送回服务器<ref name=":12">[https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cookie Cookie — MDN Web Docs]</ref>。 | |||
# '''服务器识别''':服务器通过读取Cookie标头中的信息,即可识别用户的身份或状态,从而提供个性化或持续性的服务<ref name=":0" />。 | |||
== 主要用途 == | |||
Cookie在Web应用中主要有以下三大用途<ref name=":0" /><ref name=":7" />: | |||
* '''会话管理'''(Session management):用于维护用户的登录状态、购物车内容、游戏分数等会话相关信息。用户登录后,服务器通过一个包含会话ID(Session ID)的Cookie来识别用户,使其在不同页面间无需重复登录<ref name=":0" /><ref name=":7" />。 | |||
* '''个性化设置'''(Personalization):用于存储用户的偏好设置,如界面语言、主题、字体大小等<ref name=":0" />。 | |||
* '''跟踪'''(Tracking):用于记录和分析用户的行为,例如点击了哪些按钮、浏览了哪些页面。第三方跟踪Cookie常被用于跨站点收集用户浏览历史,以用于定向广告投放<ref name=":7" />。 | |||
== 分类 == | |||
根据来源和生命周期,Cookie可分为以下类别: | |||
* '''会话Cookie'''(Session cookie):仅在浏览器会话期间存在,关闭浏览器后即被删除。不设置过期时间(Expires)或最大存活时间(Max-Age)的Cookie即为会话Cookie<ref name=":0" />。 | |||
* '''持久Cookie'''(Persistent cookie):设置了过期时间或最大存活时间,在到期前会一直存储在用户设备上,即使关闭浏览器也不会丢失<ref name=":0" />。 | |||
* '''第一方Cookie'''(First-party cookie):由用户当前访问的网站所设置的Cookie<ref name=":7" />。 | |||
* '''第三方Cookie'''(Third-party cookie):由当前访问网站之外的第三方(如广告网络)通过嵌入内容(如广告或图片)所设置的Cookie,常用于跨站点跟踪用户行为<ref name=":7" />。 | |||
== 安全与隐私 == | |||
Cookie技术自诞生以来,其隐私和安全问题一直备受关注<ref name=":7" />。 | |||
* '''安全风险''':Cookie可能被攻击者通过[[跨站脚本]](XSS)攻击窃取,或用于[[跨站请求伪造]](CSRF)攻击<ref name=":7" />。为增强安全性,Cookie可设置`Secure`标志(仅通过[[HTTPS]]传输)和`HttpOnly`标志(禁止[[Java]]Script访问)<ref name=":11" /><ref name=":0" />。 | |||
* '''隐私问题''':第三方跟踪Cookie能够跨站点记录用户的浏览历史,引发了对用户隐私的广泛担忧<ref name=":7" />。欧盟的《[[通用数据保护条例]]》(GDPR)和ePrivacy指令等法规要求网站在使用非必要Cookie时必须获得用户的知情同意<ref name=":7" />。近年来,主流浏览器(如[[Apple Safari|Safari]]、[[Mozilla Firefox|Firefox]])已开始逐步限制或淘汰第三方Cookie<ref name=":7" />。 | |||
== 标准与规范 == | |||
Cookie的标准化历程如下: | |||
* 1997年:[[RFC 2109]] —— 首次对Cookie进行标准化定义<ref name=":2" />。 | |||
* 2000年:[[RFC 2965]] —— 对RFC 2109进行了修订,增加了对HTTP状态管理机制的详细说明<ref name=":2" />。 | |||
* 2011年:[[RFC 6265]] —— 取代RFC 2109和RFC 2965,成为当前HTTP Cookie的正式标准,定义了`Set-Cookie`和`Cookie`标头的语法与行为<ref name=":6" />。 | |||
== 参考文献 == | |||
<references /> | |||