Cookie
HTTP cookie,简称cookie,又稱「網站/瀏覽+魔餅/魔片」等,是浏览网站时由网络服务器创建并由网页浏览器存放在用户计算机或其他设备的小文本文件。
HTTP/HTTPS |
---|
版本 |
请求方法 |
报文主体 |
頭欄位 |
狀態碼 |
相关主题 |
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可能有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
Domain
和Path
属性定义了cookie的范围。它们告诉浏览器cookie属于什麼网站。Cookies只能设置在当前资源的顶级域及其子域上。
如果服务器未指定cookie的Domain
和Path
,则它们默认为所请求资源的域和路径[20]。
Expires和Max-Age
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和HttpOnly
Secure
属性旨在将cookie加密,使浏览器仅通过安全/加密连接使用cookie。
HttpOnly
要求浏览器不要通过HTTP(和HTTPS)以外的渠道使用cookie。这意味着无法通过客户端脚本语言(尤其是JavaScript)访问cookie,因此无法通过跨站点脚本攻击轻易窃取。[24]
分类
持久cookie
持久cookie只在其创建者设置的特定日期后过期,期间一直有效。
用途
会话管理
虽然最初引入cookie是为了让用户在浏览网站时记录要购买的物品[6][7]。但现在用户购物车的内容通常存储在服务器的数据库中,而不再是客户端的cookie中。
当前会话cookie的常见用途是登录。当用户访问网站的登录页面时,Web服务器通常会向客户端发送一个包含唯一会话标识符的cookie。当用户成功登录时,服务器会记住该特定会话标识符已经过身份验证,并授予用户访问其服务的权限。
喜好設定
许多网站用cookie存储用户偏好等设置,向用户顯示喜好內容。
跟踪
跟踪cookie用于跟踪记录用户的网络浏览习惯,如用户的购物习惯。
浏览器设置
大多数现代浏览器都支持cookie并允许用户禁用它们,以下是常见选项:[27]
- 完全启用或禁用cookie,以便它们始终被接受或始终被阻止;
- 使用cookie管理器查看和有选择地删除cookie;
- 彻底清除cookie等所有私人数据。
安全和私隱
第三方cookie和隐私
网页可能第三方服务,使用网页很可能会遇到第三方cookie(访问网页外其他服务器的cookie)。RFC 2109和RFC 2965要求浏览器保护用户隐私,默认不允许在服务器间共享cookie,但RFC 6265放宽。大多数浏览器只要第三方网站有合理的隐私政策申明,就默认允许第三方cookie。[32]
广告是第三方cookie常见的使用场景,广告公司借此跟踪用户。网站应当告知用户有第三方cookie存在,不向消费者披露第三方cookie使用情况的网站运营商可能面临法律风险,一般网站都会在隐私或cookie政策说明其使用的第三方cookie。[33]
窃取Cookie和劫持会话
很多网站用cookie作为用户的唯一标识符,但如果网站使用cookie作为会话标识符,攻击者就可以窃取受害者的全套cookie来冒充其请求。
参考文献
- . Cisco. 2018-07-17 [2022-08-25]. (原始内容存档于2022-03-17) (英语).
- . dominopower.com. [19 October 2017]. (原始内容存档于19 October 2017).
- . The Jargon File (version 4.4.7). [8 September 2017]. (原始内容存档于6 September 2017).
- . [2022-08-25]. (原始内容存档于2022-07-12).
- Schwartz, John. . The New York Times. 2001-09-04 [2017-02-19]. (原始内容存档于2011-08-26).
- 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
- 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. . ACM Transactions on Internet Technology. November 2001, 1 (2): 151–198. ISSN 1533-5399. arXiv:cs/0105018 . doi:10.1145/502152.502153.
- Hardmeier, Sandi. . Microsoft. 2005-08-25 [2009-01-04]. (原始内容存档于2005-10-01).
- Jackson, T. . Financial Times. 1996-02-12.
- Vamosi, Robert. . News.cnet.com. 2008-04-14 [19 October 2017]. (原始内容存档于9 December 2013).
- . [2022-08-25]. (原始内容存档于2022-08-01).
- . 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. . The Security Practice. 6 March 2011 [17 June 2016]. (原始内容存档于7 August 2016).
- . developer.mozilla.org. [2021-03-08]. (原始内容存档于2022-03-02).
- Peng, Weihong; Cisna, Jennifer. . 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. . International Journal of Communication Systems. 2019-01-25, 32 (2): e3857 [2022-08-25]. doi:10.1002/dac.3857. (原始内容存档于2022-06-10) (英语).
- . IETF. March 2014 [2011-05-12]. (原始内容存档于2011-05-01).
- . ietf.org. [2011-05-12]. (原始内容存档于2011-05-01).
- . inikulin.github.io. 2016 [2016-09-30]. (原始内容存档于2016-10-02).
- Coles, Peter. . Mrcoles.com. [28 July 2016]. (原始内容存档于29 July 2016).
- (PDF) XIII. Symantec Corp.: 1–3. April 2008 [May 11, 2008]. (原始内容存档 (PDF)于June 25, 2008).
- . Microsoft Developer Network. [22 October 2012]. (原始内容存档于14 October 2012).
- Whalen, David. . Cookie Central. June 8, 2002 [2009-01-04]. (原始内容存档于August 24, 2011).
- . Microsoft. December 18, 2007 [2009-01-04]. (原始内容存档于December 28, 2008).
- . Firefox Support Knowledge base. Mozilla. 16 September 2008 [2009-01-04]. (原始内容存档于3 January 2009).
- . Google Chrome Help. [2009-01-04]. (原始内容存档于2009-03-11).
- . Google Chrome Help. [2009-01-04]. (原始内容存档于2009-03-11).
- , 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