4月阅读周·HTTP权威指南:客户端识别与cookie机制之cookie是如何工作的篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
客户端识别与cookie机制
Web服务器可能会同时与数千个不同的客户端进行对话。这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端。
cookie
cookie是当前识别用户,实现持久会话的最好方式。前面各种技术中存在的很多问题对它们都没什么影响,但是通常会将它们与那些技术共用,以实现额外的价值。cookie最初是由网景公司开发的,但现在所有主要的浏览器都支持它。
cookie的类型
可以笼统地将cookie分为两类:会话cookie和持久cookie。会话cookie是一种临时cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话cookie就被删除了。持久cookie的生存时间更长一些;它们存储在硬盘上,浏览器退出,计算机重启时它们仍然存在。通常会用持久cookie维护某个用户会周期性访问的站点的配置文件或登录名。
会话cookie和持久cookie之间唯一的区别就是它们的过期时间。稍后我们会看到,如果设置了Discard参数,或者没有设置Expires或Max-Age参数来说明扩展的过期时间,这个cookie就是一个会话cookie。
cookie是如何工作的
cookie就像服务器给用户贴的“嗨,我叫”的贴纸一样。用户访问一个Web站点时,这个Web站点就可以读取那个服务器贴在用户身上的所有贴纸。
用户首次访问Web站点时,Web服务器对用户一无所知。Web服务器希望这个用户会再次回来,所以想给这个用户“拍上”一个独有的cookie,这样以后它就可以识别出这个用户了。cookie中包含了一个由名字=值(name=value)这样的信息构成的任意列表,并通过Set-Cookie或Set-Cookie2 HTTP响应(扩展)首部将其贴到用户身上去。
cookie中可以包含任意信息,但它们通常都只包含一个服务器为了进行跟踪而产生的独特的识别码。服务器会将一个表示id="34294"的cookie贴到用户上去。服务器可以用这个数字来查找服务器为其访问者积累的数据库信息(购物历史、地址信息等)。
但是,cookie并不仅限于ID号。很多Web服务器都会将信息直接保存在cookie中。比如:
Cookie: name="Brian Totty"; phone="555-1212"
浏览器会记住从服务器返回的Set-Cookie或Set-Cookie2首部中的cookie内容,并将cookie集存储在浏览器的cookie数据库中(把它当作一个贴有不同国家贴纸的旅行箱)。将来用户返回同一站点时(参见图11-3c),浏览器会挑中那个服务器贴到用户上的那些cookie,并在一个cookie请求首部中将其传回去。
cookie罐:客户端的状态
cookie的基本思想就是让浏览器积累一组服务器特有的信息,每次访问服务器时都将这些信息提供给它。因为浏览器要负责存储cookie信息,所以此系统被称为客户端侧状态(client-side state)。这个cookie规范的正式名称为HTTP状态管理机制(HTTP state management mechanism)。
1.网景的Navigator的cookie
不同的浏览器会以不同的方式来存储cookie。网景的Navigator会将cookie存储在一个名为cookies.txt的文本文件中。例如:
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This is a generated file! Do not edit.
#
# domain allh path secure expires name value
www.fedex.com FALSE / FALSE 1136109676 cc /us/
.bankofamericaonline.com TRUE / FALSE 1009789256 state CA
.cnn.com TRUE / FALSE 1035069235 SelEdition www
secure.eepulse.net FALSE /eePulse FALSE 1007162968 cid %FE%FF%002
www.reformamt.org TRUE /forum FALSE 1033761379 LastVisit 1003520952
www.reformamt.org TRUE /forum FALSE 1033761379 UserName Guest
..
文本文件中的每一行都代表一个cookie。有7个用tab键分隔的字段。
- domain(域):cookie的域。
- allh:是域中所有的主机都获取cookie,还是只有指定了名字的主机获取。
- path(路径):域中与cookie相关的路径前缀。
- secure(安全):是否只有在使用SSL连接时才发送这个cookie。
- expiration(过期):从格林尼治标准时间1970年1月1日00:00:00开始的cookie过期秒数。
- name(名字):cookie变量的名字。
- value(值):cookie变量的值。
2.微软Internet Explorer的cookie
微软的Internet Explorer将cookie存储在高速缓存目录下独立的文本文件中。可以通过浏览这个目录来查看cookie。Internet Explorer中cookie文件格式是特有的,但很多字段都很容易理解。cookie一个接一个地存储在文件中,每个cookie都由多行构成。
文件中每个cookie的第一行中都包含了cookie的变量名。下一行是变量的值。第三行是域和路径。剩下的行就是一些特有的数据,可能包含日期和一些标记。
总结
cookie非常重要,而且它们定义了一些新的HTTP首部,所以我们要比前面那些技术更详细地介绍它们。cookie的存在也影响了缓存,大多数缓存和浏览器都不允许对任何cookie的内容进行缓存。
cookie中可以包含任意信息,但它们通常都只包含一个服务器为了进行跟踪而产生的独特的识别码。服务器会将一个表示id="34294"的cookie贴到用户上去。服务器可以用这个数字来查找服务器为其访问者积累的数据库信息(购物历史、地址信息等)。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)