HTTP cookie ,简称cookie ,又稱数码存根 、「網站/瀏覽+魔餅/魔片 」等,是浏览网站 时由网络服务器 创建并由网页浏览器 存放在用户计算机或其他设备的小文本文件。
Cookie使Web服务器能在用户的设备存储状态信息(如添加到在线商店购物车中的商品)或跟踪用户的浏览活动(如点击特定按钮、登录或记录历史)[ 1] 。
“cookie”一词由网络浏览器程序员盧·蒙特利 创造,源自“magic cookie”(1979年就已经出现,当时指UNIX 程序收发的数据包)[ 2] [ 3] 。“magic cookie”这词本身来自幸运饼 [ 4] 。
盧·蒙特利在1994年6月[ 5] 想到这点子时正在網景 工作,公司则正在为MCI 开发电子商务 应用程序。文頓·瑟夫 和約翰·克倫辛 代表MCI与网景讨论技术,表示不希望总是由其服务器保存事务状态,而要求网景将状态存储在用户计算机。Cookies便是网景提出的解决方案[ 6] [ 7] 。
同年,蒙特利与约翰·詹南德雷亚一起编写了最初的网景cookie规范。1994年10月13日发布的网景导航者 0.9beta版开始支持cookie[ 8] 。它公开的首次使用目的是检查网景网站的访问者是否已经访问过该网站。蒙特利于1995年申请了cookie技术的专利,1998年获批(US 5774670 )。1995年10月发布的第2版Internet Explorer 也宣布支持cookie[ 9] 。
当时,cookie并未为公众所知,虽然默认用户接受cookie,网站并不会通知用户其存在。1996年2月12日,英国《金融时报 》发表文章介绍cookie,使其为大众所知[ 10] 。其潜在的隐私问题也引起讨论,1996年和1997年的美国联邦贸易委员会 两次就cookie举行听证会[ 11] 。
互联网工程任务组 专门成立了工作小组规范cookie的用法。布莱恩·贝伦多夫和大卫·克里斯托分别提出两套有关HTTP事务状态的替代方案。但由克里斯托本人和蒙特利领导的小组很快决定还是使用网景规范。1996年2月,工作组将第三方cookie确定为严重隐私威胁。该小组制定的规范RFC 2109最终于1997年2月发布,要求第三方cookie要么根本不允许,要么至少默认不启用。[ 12]
网景的cookie头字段 为Set-Cookie,
RFC 2965 添加了Set-Cookie2
头字段,即“RFC 2965 cookie”[ 13] [ 14] ,但Set-Cookie2
很少使用,终于2011年4月的RFC 6265中弃用[ 15] ,已经没有现代浏览器可以识别Set-Cookie2
头字段[ 16] 。
Cookie的基本结构包括[ 17] [ 18] [ 19]
名;
值;
各种属性。
一塊cookie可能有Domain、Path、Expires、Max-Age、Secure、HttpOnly等多種属性,如
HTTP / 1.0 200 OK
Set-Cookie : LSID=DQAAAK…Eaem_vYg; Path=/accounts; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly
Set-Cookie : HSID=AYQEVn…DKrdst; Domain=.foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; HttpOnly
Set-Cookie : SSID=Ap4P…GTEq; Domain=foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly
…
Domain
和Path
属性定义了cookie的范围。它们告诉浏览器cookie属于什麼网站。Cookies只能设置在当前资源的顶级域及其子域上。
如果服务器未指定cookie的Domain
和Path
,则它们默认为所请求资源的域和路径[ 20] 。
Expires
属性定义了浏览器应删除cookie的时间,格式为Wdy, DD Mon YYYY HH:MM:SS GMT
或Wdy, DD Mon YY HH:MM:SS GMT
(YY大于或等于0并且小于等于69)。[ 21]
此外也可用Max-Age
将cookie的过期时间设置为某一段时间之后(相对于浏览器接收cookie的时间而言)。但Internet Explorer等浏览器可能不支持Max-Age
[ 22] [ 23] 。
Secure
属性旨在将cookie加密,使浏览器仅通过安全/加密 连接使用cookie。
HttpOnly
要求浏览器不要通过HTTP(和HTTPS)以外的渠道使用cookie。这意味着无法通过客户端脚本语言(尤其是JavaScript )访问cookie,因此无法通过跨站点脚本攻击 轻易窃取。[ 24]
会话cookie仅在浏览网站时临时存储[ 25] ,关闭浏览器后会自动过期或删除[ 26] 。
持久cookie只在其创建者设置的特定日期后过期,期间一直有效。
安全cookie只能通过加密连接传输(HTTPS )。它们不能通过未加密的连接传输(HTTP ),使cookie不易被盗。
虽然最初引入cookie是为了让用户在浏览网站时记录要购买的物品[ 6] [ 7] 。但现在用户购物车的内容通常存储在服务器的数据库中,而不再是客户端的cookie中。
当前会话cookie的常见用途是登录。当用户访问网站的登录页面时,Web服务器通常会向客户端发送一个包含唯一会话标识符的cookie。当用户成功登录时,服务器会记住该特定会话标识符已经过身份验证,并授予用户访问其服务的权限。
许多网站用cookie存储用户偏好等设置,向用户顯示喜好內容。
跟踪cookie用于跟踪记录用户的网络浏览习惯,如用户的购物习惯。
大多数现代浏览器都支持cookie并允许用户禁用它们,以下是常见选项:[ 27]
完全启用或禁用cookie,以便它们始终被接受或始终被阻止;
使用cookie管理器查看和有选择地删除cookie;
彻底清除cookie等所有私人数据。
此外也有管理cookie权限的附加组件。[ 28] [ 29] [ 30] [ 31]
网页可能第三方服务,使用网页很可能会遇到第三方cookie(访问网页外其他服务器的cookie)。RFC 2109 和RFC 2965要求浏览器保护用户隐私,默认不允许在服务器间共享cookie,但RFC 6265放宽。大多数浏览器只要第三方网站有合理的隐私政策 申明,就默认允许第三方cookie。[ 32]
广告是第三方cookie常见的使用场景,广告公司借此跟踪用户。网站应当告知用户有第三方cookie存在,不向消费者披露第三方cookie使用情况的网站运营商可能面临法律风险,一般网站都会在隐私或cookie政策 说明其使用的第三方cookie。[ 33]
很多网站用cookie作为用户的唯一标识符,但如果网站使用cookie作为会话标识符,攻击者就可以窃取受害者的全套cookie来冒充其请求。
^ What are cookies? What are the differences between them (session vs. persistent)? . Cisco. 2018-07-17 [2022-08-25 ] . (原始内容存档 于2022-03-17) (英语) .
^ Wherecookiecomes from :: DominoPower . dominopower.com. [19 October 2017] . (原始内容 存档于19 October 2017).
^ magiccookie . The Jargon File (version 4.4.7). [8 September 2017] . (原始内容 存档于6 September 2017).
^ Why are internet cookies called cookies? . [2022-08-25 ] . (原始内容存档 于2022-07-12).
^ Schwartz, John. Giving Web a Memory Cost Its Users Privacy . The New York Times. 2001-09-04 [2017-02-19 ] . (原始内容 存档于2011-08-26).
^ 6.0 6.1 Kesan, Jey; and Shah, Rajiv; Deconstructing Code Archive-It 的存檔 ,存档日期2018-08-19, SSRN.com, chapter II.B (Netscape's cookies), Yale Journal of Law and Technology, 6, 277–389
^ 7.0 7.1 Kristol, David; HTTP Cookies: Standards, privacy, and politics , ACM Transactions on Internet Technology, 1(2), 151–198, 2001 doi :10.1145/502152.502153 (an expanded version is freely available at 存档副本 . [2022-08-25 ] . 原始内容存档于2014-07-16. arXiv:cs/0105018v1 [cs.SE ])
^ Kristol, David M. HTTP Cookies . ACM Transactions on Internet Technology. November 2001, 1 (2): 151–198. ISSN 1533-5399 . arXiv:cs/0105018 . doi:10.1145/502152.502153 .
^ Hardmeier, Sandi. The history of Internet Explorer . Microsoft. 2005-08-25 [2009-01-04 ] . (原始内容 存档于2005-10-01).
^ Jackson, T. This Bug in Your PC is a Smart Cookie. Financial Times. 1996-02-12.
^ Vamosi, Robert. Gmailcookiestolen via Google Spreadsheets . News.cnet.com. 2008-04-14 [19 October 2017] . (原始内容 存档于9 December 2013).
^ Rfc2109 . [2022-08-25 ] . (原始内容存档 于2022-08-01).
^ Setting Cookies . staff.washington.edu. June 19, 2009 [March 15, 2017] . (原始内容 存档于March 16, 2017).
^ The edbrowse documentation version 3.5 said "Note that only Netscape-style cookies are supported. However, this is the most common flavor of cookie. It will probably meet your needs." This paragraph was removed in later versions of the documentation 互联网档案馆 的存檔 ,存档日期2017-03-16. further to RFC 2965 's deprecation.
^ Hodges, Jeff. ' HTTP State Management Mechanism' to Proposed Standard . The Security Practice. 6 March 2011 [17 June 2016] . (原始内容 存档于7 August 2016).
^ Set-Cookie2 - HTTP | MDN . developer.mozilla.org. [2021-03-08 ] . (原始内容存档 于2022-03-02).
^ Peng, Weihong; Cisna, Jennifer. HTTP Cookies, A Promising Technology. ProQuest (Online Information Review). 2000. ProQuest 194487945 .
^ Jim Manico quoting Daniel Stenberg, Real worldcookielength limits 互联网档案馆 的存檔 ,存档日期2013-07-02.
^ Lee, Wei-Bin; Chen, Hsing-Bai; Chang, Shun-Shyan; Chen, Tzung-Her. Secure and efficient protection for HTTP cookies with self-verification . International Journal of Communication Systems. 2019-01-25, 32 (2): e3857 [2022-08-25 ] . doi:10.1002/dac.3857 . (原始内容存档 于2022-06-10) (英语) .
^ HTTP State Management Mechanism, The Path Attribute . IETF. March 2014 [2011-05-12 ] . (原始内容 存档于2011-05-01).
^ RFC 6265, HTTP State Management Mechanism . ietf.org. [2011-05-12 ] . (原始内容存档 于2011-05-01).
^ Cookies specification compatibility in modern browsers . inikulin.github.io. 2016 [2016-09-30 ] . (原始内容存档 于2016-10-02).
^ Coles, Peter. HTTP Cookies: What's the difference between Max-age and Expires? – Peter Coles . Mrcoles.com. [28 July 2016] . (原始内容存档 于29 July 2016).
^ Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary) (PDF) XIII . Symantec Corp.: 1–3. April 2008 [May 11, 2008] . (原始内容存档 (PDF) 于June 25, 2008).
^ Microsoft Support Description of Persistent and Per-Session Cookies in Internet Explorer 互联网档案馆 的存檔 ,存档日期2011-09-25. Article ID 223799, 2007
^ Maintaining session state with cookies . Microsoft Developer Network. [22 October 2012] . (原始内容 存档于14 October 2012).
^ Whalen, David. The UnofficialcookieFAQ v2.6 . Cookie Central. June 8, 2002 [2009-01-04 ] . (原始内容存档 于August 24, 2011).
^ How to Manage Cookies in Internet Explorer 6 . Microsoft. December 18, 2007 [2009-01-04 ] . (原始内容存档 于December 28, 2008).
^ Clearing private data . Firefox Support Knowledge base. Mozilla. 16 September 2008 [2009-01-04 ] . (原始内容存档 于3 January 2009).
^ Clear Personal Information : Clear browsing data . Google Chrome Help. [2009-01-04 ] . (原始内容存档 于2009-03-11).
^ Clear Personal Information: Delete cookies . Google Chrome Help. [2009-01-04 ] . (原始内容存档 于2009-03-11).
^ Site Compatibility for Firefox 22 , Mozilla Developer Network, 2013-04-11 [2013-04-11 ] , (原始内容 存档于2013-05-27)
^ Miyazaki, Anthony D. (2008), "Online Privacy and the Disclosure ofcookieUse: Effects on Consumer Trust and Anticipated Patronage," Journal of Public Policy & Marketing, 23 (Spring), 19–33