概述

最近对http很感兴趣,于是开始看《http权威指南》。别人都说这本书有点老了,而且内容太多。我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做,还告诉你为什么这么做。于是我把学到的知识点记录下来,供以后开发时参考,相信对其他人也有用。

客户端识别与cookie机制

1.web服务器可能会同时与数千个不用的客户端进行对话,这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端。这就是客户端识别的应用场景。

2.http最初是一个匿名、无状态的请求/响应协议,它不是天生就具有丰富的识别特性的,但是涌现出很多用户识别机制

  • 承载用户身份信息的http首部。
  • 客户端IP地址跟踪,通过用户的IP地址对其进行识别。
  • 用户登录,用认证方式来识别用户。
  • 胖URL,一种在URL中嵌入识别信息的技术。
  • cookie,一种功能强大且高效的持久身份识别技术。

3.http首部识别

  • From首部:From首部包含了用户的E-mail地址,但由于垃圾邮件的散发,所以很少有浏览器会发送From首部。
  • User-Agent首部:可以将用户所用浏览器的相关信息告知服务器,但它没有为识别特定的用户提供太多有意义的帮助。
  • Referer首部:提供了用户来源页面,它并不能完全标识用户,但它确实说明了用户之前访问过哪个页面。通过它可以更好地理解用户的浏览行为和兴趣所在。

4.用户登录:服务器会返回401 Login Required HTTP响应码,并添加www-Authentication首部,要求用户登录,这样浏览器就会弹出一个登录对话框。但是这种识别方式需要在每个站点上都登录一次,非常繁琐。

5.胖URL:有些web站点会为每个用户生成特定版本的URL来追踪用户的身份,通常它会在URL路径开始或结束的地方添加一些状态信息,改动后包含了用户状态信息的URL被称为胖URL。Amazon就使用了胖URL这种识别方式。

6.胖URL存在几个很严重的问题:

  • 丑陋的URL。
  • 无法共享URL,因为包含了个人信息。
  • 破坏缓存,为每个用户生成特定的URL版本意味着不再有公共缓存了。
  • 逃逸口。如果用户无意请求另一个特定的url时,就会在无意中逃离胖URL,从而丢失用户信息和会话。
  • 会话是非持久的。用户退出登录时,所有的信息都会丢失。

7.cookie分为会话cookie持久cookie。会话cookie是一种临时cookie,它记录了用户访问站点时的设置和偏好,用户退出浏览器时,会话cookie就被删除了;持久cookie的生存时间更长一些,计算机重启时它们仍然存在,它被用来维护某个用户访问站点的配置文件或登录名。

8.用户首次访问web站点时,web服务器对用户一无所知。web服务器希望这个用户会再次回来,所以想给这个用户“拍上”一个独有的cookie,这样以后它就可以识别出这个用户了。cookie中包含了一个由名字=值这样的信息构成的任意列表,并通过Set-Cookie或Set-Cookie2 HTTP响应首部将其贴到用户身上去。

9.产生cookie的服务器可以向Set-Cookie响应首部添加一个Domain属性来控制哪些站点可以看到那个cookie。比如,下面的http响应首部就是在告诉浏览器将cookie user="mary17"发给域".airtravelbargains.com"中所有站点。

Set-cookie: user="mary17"; domain="airtravelbargains.com"

10.cookie还有一个路径属性,表示只有访问这个路径才能得到这个cookie,如下所示:

Set-cookie: pref=compact; domain="airtravelbargains.com"; path=/autos/

11.cookies有2个版本:一个是版本0的Set-Cookie首部;另一个是版本1的Set-Cookie2首部。

12.cookie的滥用情况是存在的,第三方web站点使用持久cookie来跟踪用户就是一种最大的滥用,将这种做法与IP地址和Referer首部信息结合在一起,这些营销公司就可以构建起相当精确的用户档案和浏览模式信息。

最新文章

  1. 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
  2. C# 获取系统时间及时间格式
  3. Collider Collision 区别
  4. POJ 1925 Spiderman
  5. html5.js让IE(包括IE6)支持HTML5元素方法
  6. CodeForces 742B Batch Sort
  7. Crystal Reports "Access to report file denied. Another program may be using it."
  8. Android带返回值的窗口跳转
  9. iOS开发网络篇-NSURLSession介绍
  10. svn:...target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)
  11. mysql datestamp坑
  12. SVN的初步使用方法
  13. Ajax请求安全性讨论 - Eric.Chen(转)
  14. CMake VS工程总结
  15. CSS问题:怎么样让鼠标经过按钮的时候发生的状态一直停留在当页呢?
  16. 读懂javascript深拷贝与浅拷贝
  17. (第一章)对程序员来说CPU是什么
  18. Spark Streaming通过JDBC操作数据库
  19. opencv学习之路(20)、直方图应用
  20. 微软BI SSIS 2012 辅助阅读博客

热门文章

  1. 将EditPad Lite 加入鼠标右键
  2. boost asio死锁一例
  3. oracle异机恢复 open resetlogs 报:ORA-00392
  4. dotNet程序员的Java爬坑之旅(三)之spring MVC篇一
  5. JAVA实训第四次作业
  6. vue中使用axios
  7. 修改maven的源地址为阿里源
  8. IDEA导入Maven多项目(Mac下)
  9. 人工智能&物联网开发的目录
  10. SSM框架集成及配置详解(Maven管理)