计算机网络基础:客户端识别和cookie机制(笔记)
本博文是本人阅读《http权威指南》第三部分识别、认证和安全时做的笔记
HTTP首部
- 七种常见用来承载用户相关信息的HTTP请求首部
首部名称 | 首部类型 | 描述 |
---|---|---|
From | 请求 | 用户的email |
User-agent | 请求 | 用户的浏览器软件 |
Referer | 请求 | 用户是从哪一个页面按照链接跳转过来的 |
Authorization | 请求 | 用户名和密码 |
Client-IP | 扩展请求 | 客户端的IP |
X-Forawrded-For | 扩展请求 | 客户端的IP |
Cookie | 扩展请求 | 服务器产生的ID标签 |
客户端IP
-
曾经尝试过将客户端ip作为一种表示形式使用,但是有许多缺点
- ip描述的只是机器,不是用户
- 许多ISP都会在用户登陆时为其分配动态ip,每一次用户登陆,都会是不同的ip
- 许多用户都是通过NAT防火墙来浏览网络内容的,NAT设备隐藏了背后的实际用户的ip地址
- HTTP网关和代理通常会打开一些新的、到原始服务器的TCP连接,web服务器看到的是代理服务器的ip地址。有些代理为了绕过这一个问题,会添加Client-IP或者X-Forwarded-For扩展首部来保存原始的ip地址,但是不是所有的代理都支持这种行为
用户登陆
- 为了使web站点的登陆更加简便,HTTP中包含一种内建机制,可以用WWW-Authenticate首部和Authorization首部向web站点传送用户相关信息,一旦登陆,浏览器就可以不断地在每一条发往这个站点的请求中发送这个登陆信息
胖URL
- 有些web站点会为每一个用户生成特定版本的url来追踪用户的身份,通常会对真正的url进行扩展,在url路径开始或者结束的地方添加一些状态信息,用户浏览站点时,web服务器会动态生成一些超链接,继续维护URL中的状态信息,这些改动后包含用户状态的URL就被称为胖URL
Cookie
-
Cookie类型
- 会话cookie:临时cookie,用户退出浏览器即删除
- 持久cookie:存储在磁盘
-
两种cookie的区别:过期时间(如果设置了Discard参数或者没有设置Expires或者Max-Age参数来说明扩展的过期时间,这个cookie就是一个会话cookie)
-
工作:
- 客户端访问服务器,服务器为了记住这个用户,给这个用户一个Cookie
- Cookie中包含一个由 name=value 这样的信息构成的任意列表,并通过Set-cookie或者Set-cookie2 HTTP相应(扩展)首部将其"贴"到用户身上
- cookie可以包含任意信息,例如包含id="1234"的cookie,服务器可以用这个数字来查找服务器为其访问者积累的数据库信息
- 浏览器会记住从服务器返回的Set-cookie或者Set-cookie2首部中的cookie内容,并将cookie集储存在浏览器的cookie数据库中,以后用户访问同一站点时,浏览器会挑出那个服务器贴到用户上的那些cookie,并在一个cookie请求首部中将其传回去
-
Cookie的属性
- 域属性:向Set-Cookie相应首部添加domain属性,来控制哪些站点可以看到该cookie,例如
Set-cookie: user="xiaoming"; domain="abc.com"
: - 路径属性:在这个属性列出的URL路径前缀下所有cookie都是有效的,例如:
Set-cookie: user="xiaoming"; domain="abc.com"; path=/class
- 域属性:向Set-Cookie相应首部添加domain属性,来控制哪些站点可以看到该cookie,例如
-
cookie成分
- cookie规范有两个不同的版本,本文不对这些版本的Set-Cookie首部可能包括的字段进行说明了,碰到不懂得时候再查也不迟,而且大多的属性都比较易懂。