HTTP协议是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。
1.问题的提出
假设要求登录认证的Web页面本身无法进行状态的管理(不记录已登陆的状态),那么每次跳转新的页面就要再次登录。
那么如何解决这个问题呢?
2.问题的解决办法
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态:Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去;服务器端发现该客户端发送过来的Cookie后,回去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
3.HTTP请求和响应报文举例:
(1)请求报文(没有Cookie信息的状态)
GET /reader/ HTTP/1.1
Host: hacker.jp
*首部字段内没有Cookie的相关信息
(2)响应报文(服务器端生成Cookie信息)
HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Sever: Apache
<Set-Cookie: sid=1342077140226724; path=/ ;expires=Wed,=>10-Oct-12 07:12:20 GMt>
Content-Type: text/plain; charset=UTF-8
(3)请求报文 (自动发送保存着的Cookie信息)
GET /image/ HTTP/1.1
Host: hacker.jp
Cookie: sid=1342077140226724
4.总结
到这我们之前提的那个问题就解决了,我们从客户端发出登录Web页面的请求,服务器端的响应包报文中包含Set-Cookie信息,然后客户端保存这个Cookie值,然后我们发出浏览该网站其它页面的请求时,请求报文中会自动加上Cookie信息,服务器端接收到该请求时,便调出之前的记录,通俗说就是此时服务器知道发送请求的是刚才登录的那家伙。便解决了每次跳转页面就要重新登录的问题。