客户端识别与Cookie机制

来源:互联网 发布:太祖知乎 编辑:程序博客网 时间:2024/06/05 02:53

客户端识别与Cookie机制

Part 1 Cookie产生的背景

HTTP最初是一个匿名的、无状态的请求/响应协议。

服务器处理来自客户端的请求,然后向客户端回送一条响应。

Web服务器几乎没有信息可以用来判定是哪个用户发送的请求,也无法用来访问用户的请求序列。

随着时代的发展,现代Web应用程序希望能够与客户进行个性化的接触。即Web应用程序希望对连接在网络另一端的用户有更多的了解,并且能在用户浏览页面是对其进行跟踪。

以淘宝为例,淘宝希望HTTP协议能够帮助淘宝网站完成以下几种功能:

  • 个性化的问候。
    • 为不同的用户生成专门的欢迎词和页面内容,使用户购物体验更加个性化。
  • 个性化的推荐。
    • 根据不同用户的信息,推荐用户可能感兴趣的商品。
  • 个人信息的存档。
    • 用户在淘宝网站付款时不用重复输入支付宝帐号等信息,只需要从用户信息的存档调取即可,使用户购物体验更加便捷。
  • 记录会话。
    • 用户在使用在线购物车时不用重复输入用户名密码,而是通过HTTP协议来区分不同的用户。

基于以上种种要求,HTTP协议强烈希望有一种机制能够满足现在Web应用的要求。

Part 2 发展历程

No.1 HTTP首部阶段

HTTP协议首先从自身入手,希望找到一种能够满足以上要求的机制。

在HTTP协议中,有七种常见的用来承载用户信息的HTTP请求首部。

这里写图片描述

  • From首部。
    • From首部包含了用户的E-mail地址。每个用户都有不同的E-mail地址,理想情况下可以使用E-mail地址作为可行的源端来识别用户。但是存在一个问题,即大部分用户不希望自己的E-mail地址被收集(可能会被不道德的服务器商收集以用来发送垃圾邮件等),所以很少有浏览器会发送From首部。
  • User-Agent首部。
    • User-Agent首部可以用来将用户所用浏览器的相关信息告知服务器,包括程序的名称和版本,通常还包含操作系统的相关信息。但是User-Agent首部并没有为识别特定的用户提供太多有意义的帮助。
  • Referer首部。
    • Referer首部提供了用户来源页面的URL。但是Referer首部也没有为识别特定的用户提供太多有意义的帮助。

No.2 客户端IP阶段

前面说到,HTTP协议的首部不能帮助Web应用程序识别特定的用户。

所以,早期的Web先锋尝试将客户端IP地址作为一种标识形式使用来帮助Web应用程序识别特定的用户。

他们假设每个用户都有不同的IP地址,IP地址也很少会发生变化。

如果Web服务器可以判断出每条请求的客户端IP地址的话,那么可以帮助Web应用程序识别特定的用户。

但是问题接踵而至:

  • 客户端IP地址仅仅描述的是一台机器的信息,而不是用户的信息。如果多个用户共享一台机器,那就无法进行区分了。
  • 很多英特网服务提供商都会在用户登陆时为其动态分配IP地址。
  • 为了提高安全性,并对稀缺的地址资源进行管理,很多用户都是通过网络地址转换(NAT)防火墙来浏览网络内容的。
  • HTTP代理和网关的出现使用户”改变”IP成为可能。

No.3 登陆阶段

为了是Web站点的登陆更加简便,HTTP中包含了一种内建机制,可以用WWW-Authenticate首部和Authorization首部向Web站点传送用户的相关信息。一旦用户登陆,浏览器就可以不断地在每条发往这个站点的请求中发送这个登陆信息了。

具体流程如下图所示:

这里写图片描述

Part 3 Cookie机制

Cookie是当前识别用户,实现持久会话的最好方式。

Cookie的类型

Cookie可以分为两类(唯一区别是它们的过期时间):

  • 会话Cookie
    • 会话Cookie是一种临时Cookie,它记录了用户访问站点时的设置和偏好。
    • 用户退出浏览器时,会话Cookie就被删除了。
  • 持久Cookie
    • 持久Cookie存储在硬盘上,浏览器退出、计算机重启是它们仍让存在。

Cookie的工作原理

如图所示

这里写图片描述

Cookie就像一张”贴纸”,上面记录有用户的相关信息。

当用户首次访问Web站点时,Web服务器对用户一无所知。但是Web服务器希望这个用户会再次回来,所以给此用户”贴上”(Set-Cookie)一张独一无二的”贴纸”(Cookie)这样Web服务器下次就能识别这个用户了。当用户再次访问Web站点时,用户自己出示自己的”贴纸”(Cookie)给Web服务器,这样Web服务器就根据(Cookie)来为其查找其积累的数据库信息(购物历史等)。

版本0的Cookie

最初的Cookie规范是由网景公司定义的。

版本0的Cookie定义了Set-Cookie响应首部,Cookie请求首部以及用于控制Cookie的字段。

Set-Cookie:name=value;[expires=data];[path=path];[domain=domain];[secure]

Cookie:name=value;[name2=value2]

这里写图片描述

这里写图片描述

版本1的Cookie

版本1标准引入了Set-Cookie2首部和Cookie2首部,版本1比版本0更复杂,同时没有得到完全的支持。

这里不作过多的解释。

这里写图片描述

这里写图片描述

0 0
原创粉丝点击