Http Cookies 和相关概念

Http Cookies 和相关概念

概述

Http 是一种无状态的协议,而且最早的时候服务器无法通过某一个连接确定是哪一个客户端连接上了服务器,所以Web开发者,通过改造Http协议,在Http协议增加了标志客户端的一些首部字段。

然而,IP地址可以一定程度上帮助服务器标志客户端,但是实际上存在以下一些情况(不完整列举)

客户端使用了代理吴服务器,这样的话,访问服务器的就是代理服务器的IP地址。
有些互联网服务提供商给用户分配的是动态IP,这样的用户每次登陆的IP可能不一致。
使用了互联网安全防火墙,这些要通过网络地址转换,所以服务器拿到的IP也不是真实的客户端IP地址。
Http代理和网关会打开一些原始的 Tcp连接,所以IP也不是真实的。

这里写图片描述

前述:

没有使用 Cookies 字段之前,实现Cookies类型功能的,又由谁来实现?下面就看一下这些相关的介绍。

Form 字段

包含了用户的电子邮件地址,一般这个是隐私信息,不会用来标志客户端,我们参考具体的get 和 post 请求,可以看到都没有使用 Form 这个字段

User-Agent 字段

这个字段是最常使用的字段,它标志了客户端的一些信息,例如客户端浏览器类型相关信息(版本,内核等),还有操作系统信息

例如我通过火狐浏览器,百度搜索一个汉字,下面是我的请求体头部的 User-Agent

“Mozilla/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0”

Referer 字段

这个字段记录了客户端从哪个网址跳转到服务器,能记录客户端的访问记录。能够记录上一个页面的 URL地址,能够在一定程度上标志客户端。

Authorization 字段

服务器为了标志不同的客户,可以通过要求客户在登陆的时候,输入账号密码,其实这就是最早的登陆。下面选取了《Http权威指南》的图示来说明。

这里写图片描述

首先是浏览器发起对服务器的访问请求
服务器由于无法识别当前客户,所以会返回 401 Login Required 的返回码(也就是状态码,最常见的状态码是 200),并添加www-Authentication 首部,要求用户登陆,浏览器这时候会显示登陆框。(为了不让用户重复登陆,浏览器会记住用户的登陆信息,再下一次的同一站点访问的时候,会自动加上登陆信息,例如你在某个页面登陆了淘宝,然后在之前没有登陆账号的淘宝页面刷新一下,就会发现自己处于登陆状态)
在用户登陆之后,会将登陆信息存储在 请求体的头部的 Authorization 字段中,然后在整个会话期间,都保存这个登陆信息。(关闭浏览器会话结束)

tip:这个字段可以很好的解决用户多次登陆的问题,但是如果你在浏览器访问多个站点,多个站点使用了不同的账号密码,这样的话,这个字段就不能帮助我们解决多个站点的登陆问题。

另外在后来的发展中,服务器可以通过特定的 URL 来区分不同客户,具体的实现机制是在,客户端访问完服务器之后,给特定的 URL 加上不同的后缀。这种URL成为 胖 URL。

Cookies 来了

然而,随着技术的发展,上面的字段用来标志用户都不太合适,所以Web开发者,就使用了一种全新的字段,Cookies 字段。Cookies 是识别当前用户和保持长久会话的最好字段,同时 Cookies 也影响了缓存,另外大部分浏览器不允许直接缓存 Cookies。

Cookies 类型

会话 Cookie 和持久 Cookie

会话 Cookie是一种临时 Cookie,它记录了用户访问站点时的偏好的设置,会话 Cookies 也是一种临时 Cookies,用户在退出浏览器的时候,会话Cookies就会被删除了。但是持久Cookies是保存在硬盘上的,只要用户不去手动清除就不会受到影响。

然后两种 Cookies 的唯一区别是,它们的过期时间。通过设置 Discard 参数 或者不设置 Expires 或者 Max-Age 将作为会话 Cookies 对待。

下图展示了服务器添加 Cookies 的简单过程

这里写图片描述

Cookies的属性

cookies 的域属性
你可以在Cookies 中添加一个 Domain 属性来控制那些站点不能看到这个 Cookies。例如,下面一种示例

这里写图片描述

这里面的话,只会将 Cookies 数值 user=”mary17” 发送给站点为 domain 里面数值的服务器。

Cookies 的路径属性

Cookies 属性中的 path 属性允许 Cookies 和特定的 Web服务器联系起来,这个属性下列出来的所有 URL前缀都会拿到这个 Cookies。例如

这里写图片描述

版本 0,又称为 Netscape cookies
版本 1,又称为 RFC 2965 Cookies

tip:这两个 Cookies 成分都不是作为 Http 1.1 的规范,而是一种扩展使用。

下面具体介绍一下这两个版本的详细信息

版本 0
这里写图片描述
这里写图片描述

版本 1
这里写图片描述
这里写图片描述

关于后续 Cookies 在客户端的使用,会后续给出文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值