胖URL(fat url)

目录

前言

  HTTP本身是匿名/无状态的请求/响应协议,为了能够进行客户端识别,发展出了很多种解决方案,胖URL就是其中一种用户识别机制,它是一种在URL中嵌入识别信息的技术。


定义

  服务端可以通过为每个用户生成特定版本的URL来追踪用户身份。通常的做法是在URL开始或结束的地方增加一些状态信息。用户浏览站点时,web服务器会动态生成一些超链,继续维护URL中的状态信息。这种改动后的URL就被称为胖URL(fat url)。以下是《HTTP权威指南》中给出的一个例子:

其中粗体的002-1145265-8016838就是一种特定的标识码。


机制

  通过胖url,可以将服务器上若干个独立的HTTP事务捆绑成一个“会话”或者“访问”。用户首次访问时,会生成一个唯一的id,用服务器可以识别的方式将这个id添加到url中,然后服务器就会将浏览器重定向至这个新的url,不管什么时候,只要服务端接收到了对该胖URL的请求,就可以去查找那个用户相关的状态。


场景

  服务器通常用重定向方式来重写URL,用于嵌入上下文,当客户端请求到达时,服务器会生成一个新的包含了嵌入式状态信息的URL,并将用户重定向到这个新的URL上去。客户端会跟随这个重定向信息访问新的URL,这次访问会带上经过增强的信息,这是在事务间维护状态的一种有效方式。这种经过增强的URL有时就可以称为“胖URL”。


缺点

1.丑陋的URL
  一串冗长的标识码破坏了url的基本结构。
2.无法共享URL
  胖URL中包含了用户相关的信息,因此如果将URL共享给别人,就有可能泄露个人信息。
3.破坏缓存
  为每个用户生成特定版本的URL意味着不再有可供公共访问的URL需要缓存了。
4.额外的服务器负荷
  主要指重写URL的负荷。
5.逃逸口
  当用户访问一个其他站点时,就很容易在无意之中“逃离”胖URL会话。只有用户严格追随预先修改过的链接时,胖URL才会工作。
6.在会话期间非持久
  除非用户收藏了特定胖URL,否则用户退出登录时,所有信息将会丢失。