11.5 胖 URL
有些 Web 站点会为每个用户生成特定版本的 URL 来追踪用户的身份。通常,会对真正的 URL 进行扩展,在 URL 路径开始或结束的地方添加一些状态信息。用户浏览站点时,Web 服务器会动态生成一些超链,继续维护 URL 中的状态信息。
改动后包含了用户状态信息的 URL 被称为胖 URL(fat URL)。下面是 Amazon.com 电子商务网站使用的一些胖 URL 实例。每个 URL 后面都附加了一个用户特有的标识码(在这个例子中就是 002-1145265-8016838),这个标识码有助于在用户浏览商店内容时对其进行跟踪。
- ...
- <a href="/exec/obidos/tg/browse/-/229220/ref=gr_gifts/002-1145265-8016838">All Gifts</a><br>
- <a href="/exec/obidos/wishlist/ref=gr_pl1_/002-1145265-8016838">Wish List</a><br>
- ...
- <a href="http://s1.amazon.com/exec/varzea/tg/armed-forces/-//ref=gr_af_/002-1145265-8016838">Salute Our Troops</a><br>
- <a href="/exec/obidos/tg/browse/-/749188/ref=gr_p4_/002-1145265-8016838">Free Shipping</a><br>
- <a href="/exec/obidos/tg/browse/-/468532/ref=gr_returns/002-1145265-8016838">Easy Returns</a>
- ...
可以通过胖 URL 将 Web 服务器上若干个独立的 HTTP 事务捆绑成一个“会话”或“访问”。用户首次访问这个 Web 站点时,会生成一个唯一的 ID,用服务器可以识别的方式将这个 ID 添加到 URL 中去,然后服务器就会将客户端重新导向这个胖 URL。不论什么时候,只要服务器收到了对胖 URL 的请求,就可以去查找与那个用户 ID 相关的所有增量状态(购物车、简介等),然后重写所有的输出超链,使其成为胖 URL,以维护用户的 ID。
可以在用户浏览站点时,用胖 URL 对其进行识别。但这种技术存在几个很严重的问题。
- 丑陋的 URL
浏览器中显示的胖 URL 会给新用户带来困扰。
- 无法共享 URL
胖 URL 中包含了与特定用户和会话有关的状态信息。如果将这个 URL 发送给其他人,可能就在无意中将你积累的个人信息都共享出去了。
- 破坏缓存
为每个 URL 生成用户特有的版本就意味着不再有可供公共访问的 URL 需要缓存了。
- 额外的服务器负荷
服务器需要重写 HTML 页面使 URL 变胖。
- 逃逸口
用户跳转到其他站点或者请求一个特定的 URL 时,就很容易在无意中“逃离”胖 URL 会话。只有当用户严格地追随预先修改过的链接时,胖 URL 才能工作。如果用户逃离此链接,就会丢失他的进展(可能是一个已经装满了东西的购物车)信息,得重新开始。
- 在会话间是非持久的
除非用户收藏了特定的胖 URL,否则用户退出登录时,所有的信息都会丢失。