Cookie技术产生的原因

我们知道,HTTP协议是客户端和服务器之间的通信协议。客户端向服务器端发送请求,服务器端向客户端产生响应回复来达成通信。

**HTTP是一种不保存状态,即无状态(stateless)协议。**也就是说,它不对之前发生过的请求和响应的状态进行管理。

可是随着Web的不断发展,因HTTP无状态而导致某些情况下通信变得棘手很多。比如,我们登录到一家购物网站,当我们点开某一款商品跳到该网站的其它页面后,我们还希望自己的账号处于登陆状态,这时候又该怎么办呢?

为了解决HTTP协议无状态的特征,于是引入了Cookie技术。通过在HTTP通信里面添加Cookie信息,就可以管理客户端状态了。

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

cookie3

cookie3

  • 客户端第一次向服务器发送请求时,服务器端会自动生成cookie信息,用来记录是哪一个客户端发送过来的;然后把cookie信息添加到响应报文中;客户端保留cookie信息。
  • 第二次发送(带有cookie信息)的请求,服务器检查cookie,识别出是哪一台客户端的发来的。

HTTP请求报文和响应报文内容如下:

cookie3

为Cookie服务的首部字段

本节对目前使用最为广泛普及的标准进行说明。

首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接受到的Cookie信息 请求首部字段

set-cookie

当服务器准备开始管理客户端的状态时,会事先告知各种信息。

Set-Cookie字段的属性

属性 说明
NAME=VALUE 赋予Cookie的名称和其值(必须项)
expirse=DATE Cookie的有效期(若不明确指定则默认为浏览器关闭前为止)
path=PATH 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录)
domain=域名 作为Cookie适用的对象的域名(若不指定则默认为创建Cookie的服务器的域名)
Secure 仅在HTTPS安全通信时才会发送Cookie
HttpOnly 加以限制,使Cookie不能被JavaScript脚本访问

cookie4

首部字段Cookie会告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie。收到多个Cookie时,同样可以以多个Cookie形式发送。

参考

图解HTTP-日-上野·宣著