- 作者: 雪山肥鱼
- 时间:20211208 06:22
- 目的: 客户端识别与cookie机制
Web 服务器可能会同时与数千个不同的客户端进行对话。这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端。这就是客户端识别。
1.个性化接触
Http 早期是匿名、无状态的请求/响应协议。放到现在是无法想象的。
web服务器几乎没有什么信息可以用来判定是哪个用户发送的请求,也无法记录来访用户的请求序列。
需求:服务器的拥有者希望对连接另一端的用户有更多的了解,并且能够在用户浏览页面时对其进行跟踪。比如Amazon会做到以下几点需求
- 个性化问候
专门为用户生成欢迎词 - 有的放矢的推荐
推荐客户感兴趣的商品 - 管理信息的存档
减少用户输入信用卡的次数 - 记录会话
在线购物,构建增量状态。比如买东西,再来还可以在购物车里看到以前的物品,在这个基础上进行叠加。
从以下几个方面介绍用户识别机制
- 承载用户身份的http信息首部
- 客户端IP地址跟踪,通过用户的IP地址对其进行识别
- 用户登录,用认证方式来识别用户
- 胖URL,在url中嵌入识别信息的技术
- cookie,高效的持久身份识别技术
2. HTTP 首部
![](https://img.haomeiwen.com/i25953572/fda63e8cd2666dbe.png)
From 首部包含了用户的email。但为了防止没有武德的服务器收集这些email地址,用来转发垃圾邮件。所以很少有服务器发送from首部。
User-Agent 首部将用户所用浏览器的信息告知服务器。
Ref 提供了用户来源的URL,这个首部不能完全标识。但它可以更好的理解用户的浏览行为,比如你从篮球网站抵达某个web 服务器。这个服务器可能推断你是个篮球迷。
3.客户端IP地址
用IP去区分每个客户端,不是不可以,前提条件是 网络拓扑图非常的简单。至少连NAT都没有,其实是非常不现实的。
- 多个用户共享一台计算机,无法进行区分
- 用户登录时自动分配地址,那么每次用户上线地址不同
- NAT
4. 用户登录
用户名和密码进行认真,显示的询问用户时谁。
可以用Authorization 首部向web 站点传送用户的相关信息。
一旦登录,浏览器就可以不断的在每条发往这个站点的请求中发送这条信息。这样就总是有登录信息可用了。
也就是说在今后的请求中,要使用用户名和密码时,浏览器会用自动存储下来的值发送过去。这样,只要登录一次,就可以在整个会话期间维持用户的身份了。
缺点:
无法满足登录多个web站点。从A 跳到B,每个站点都要登录。而且每个站点可能会有重复的用户名和密码,即用户上一次网,从A 中B的连接,跳到B 的时候,可能还要输入不同的用户名和密码
5. 胖URL
有些web站点会为每个用户生成特定版本的URL来追踪用户的身份。会对真正的URL进行扩展。在URL路径开始或结束的地方增加一些状态信息。
改动后的url成为胖URL。
![](https://img.haomeiwen.com/i25953572/8dffd83c4fb93045.png)
这个用户特有的标识码有助于服务器在用户浏览商店内容时对其进行跟踪。
可以通过胖URL将web服务器上若干个独立的HTTP事务捆绑成一个会话或访问。用户首次访问这个Web站点时,会生成唯一ID,用服务器可以识别的方式将这个ID添加到URL中去。然后服务器会将这个客户端重新导向这个胖url。
不论什么时候,只要服务器收到了对胖URL的请求,就可以去查找那个用户id相关的增量状态,然后重写所有的输出连接,使其成为胖URL,以维护用户的ID。
存在问题:
- 丑陋的URL,浏览器中显示的胖URL会给新用户带来困扰
- 无法共享url
胖url中包含了特定用户的会话信息,如果将连接转发给其他人,可能无意之中将你积累的个人信息都共享出去了。 - 破坏缓存
为每个url生成用户特有的版本就以为着不再有可供公共访问的URL需要缓存了。 - 额外的服务器负荷
服务器需要重新html页面,使得URL变胖 - 逃逸口
用户跳转到其他站点或者请求一个特定的url时,就很容易在无意中逃离胖url会话。只有当用户杨额的追随预先修改过的连接,胖url才能工作。如果用户逃离此连接,就会失去他的进展信息,得重新开始。 - 在会话间是非持久的
除非用户收藏了特定的胖URL,否则用户推出登录时,所有的信息都会丢失
6 cookie
cookie是当前识别用户,实现持久会话的最好方式。会与前面所提到的知识共用。
6.1 cookie的类型
- 会话 cookie
临时cookie,记录了用户访问站点时的设置和偏好,用户推出浏览器,会话cookie就被删除了。 - 持久cookie
生存时间更长,存储在硬盘上。通常会用持久cookie维护某个用户会周期性访问的站点的配置文件或登录名
区别就是过期时间,如果设置了discard参数,或者没有设置expires or max-age 参数来说明扩展的过期时间,这个cookie就是一个会话cookie.
6.2 cookie 工作机制
cookie 是 服务器 贴给 用户的!
- 老用户
用户访问一个web站点时,web站点可以读取那个服务器贴在用户身上的所有 贴纸。 -
新用户
首次访问web站点,web对用户一无所知,web服务器希望这个用户再次回来,所以想给这个用户拍上 独有的 cookie,这样就可以识别这个用户了。
cookie中包含了 name = value 这样的信息构成的任意列表。并通过 set-cookie 首部将其贴到用户身上去。
image.png
cookie 中可以包含任意信息,但他们通常都只包含一个服务器为了进行跟踪而产生的独特识别码。比如上图,服务器会给这个用户 贴上 id= “34294”的标签。服务器就可以用这个数字来 查找服务器为其访问者积累的数据信息库(购物历史,地址信息等)
但 cookie 并不仅仅局限于 id。很多服务器会将更多信息保存在cookie中。比如:
![](https://img.haomeiwen.com/i25953572/8170b8f14ee0f3f3.png)
浏览器将cookie集存储在浏览器的 cookie数据库中。将来用户再次访问同一站点时,浏览器会挑中cookie,塞到一个http请求首部中传过去。
6.3 cookie罐
cookie 基本思想就是 积累一组 服务器特有的信息。每次访问服务器,都带上这些cookie。
- 客户端侧状态(client - side state)
存储cookie 的地方
6.4 不同站点使用不同的cookie
浏览器只会向访问的服务器发送特有的cookie.
关于广告:
广告做的像web站点的一个组成部分,而且他们会发送持久cookie给用户。当用户访问另一个由同一广告公司提供服务的站点时,(因为域是匹配的)。浏览器会携带cookie做请求。广告公司可以将此技术与reference首部(从哪个连接跳进来)结合,暗地里构建一个用户档案和浏览习惯的详尽数据集。
所以出于对用户隐私特性的保护,浏览器会限制三方cookie的使用。
切记:cookie 是服务器分发的
-
cookie 域属性
服务器 在 Set-Cookie 首部 添加一个 Domain属性,告诉浏览器,用户再来的时候需要带哪个cookie.
domain
意义是,当访问 .airtravelbargains.com 中的所有站点的时候,请浏览器携带 mary17 这个cookie.
也就是是说访问,
www.airtravelbargains.com
specials.airtravelbargains.com or **.airtravelbargains.com
下列cookie首部都会被发布出去:
![](https://img.haomeiwen.com/i25953572/ef805aa3a6ca98c0.png)
- cookie路径属性
允许用户将cookie与部分web站点关联。通过path属性实现这一功能
。这个属性 列出的 url路径前缀下所有 cookie都是有效的。可以理解为 cookie 对于某个域中的作用域
比如 访问:
http://www.airtravel/autos/
就会独立给你生成一个 cookie,记录你喜欢的汽车尺寸。
image.png
但是如果访问 special.html 就会只会获得下面这个cookie
![](https://img.haomeiwen.com/i25953572/deee9aad8aa32220.png)
如果访问的是 /autos/cheapo/index.html 就会拿到2个cookie.
![](https://img.haomeiwen.com/i25953572/701d38944075ccf7.png)
所以,cookie是由服务器贴到客户端上的,由客户端维护的状态片段。
6.5 cookie 的一些属性
- name=value 不提
- expires 超时时间
- domain 作用域
- Path 作用域中再指定作用域
- Secure http 使用 ssl安全连接时才会发送 cookie
- discard 客户端程序终止时,提示客户端放弃这个cookie
- max-age 以秒来计算cookie的生存周期
6.6 cookie 与 会话跟踪
可以用cookie 在用户与某个web站点进行多项事务处理时对用户进行跟踪。比如电商用会话cookie 在用户浏览时,记录用户的购物信息。当输入 amazon.com时,就启动了事务链,这些事务web服务器会通过一系列的重定向、url重写以及cookie设置来附加标识信息。
![](https://img.haomeiwen.com/i25953572/d7c11fb85a7c750b.png)
a. 用户首次请求 amazon.com
b. 服务器将请求重定向到一个电子商务软件上
c. 客户端再发一个请求
d. 服务器贴上2个会话cookie,并将用户再次重定向到另一个URL,让客户携带2个cookie再次发送请求。这个新的url是一个胖URL。如果客户端禁止了cookie,只要用户一直跟随amazon.com 也可以实现基本功能
e. 客户端请求新的url,并携带2个附加的cookie
f. 服务器重定向到 home 页面,并再次赠送2个cookie
g. 客户端再次访问新的home,并携带4个 cookie
h. 服务器回送内容
6.7 cookie与缓存
cookie 如果缓存错了,可能无效甚至泄露隐私
cookie 是存在 客户端的。切记
网友评论