HTTP无状态协议分析与Cookie的关系

来源:互联网 发布:蓝牙音频发射器 知乎 编辑:程序博客网 时间:2024/05/29 02:43

我们知道HTTP协议是一种无状态的协议,及客户端和服务器端不需要建立持久的链接。客户端和服务器的链接是基于一种请求应答模式。及客户端和服务器建立一个链接,客户端提交一个请求,服务器端收到请求后返回一个响应,然后二者就断开链接。即HTTP协议采用请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。下图表明了这种请求/响应模型。

 HTTP请求/响应模型

了解了HTTP的工作过程后我们需要再了解HTTP请求报文和响应报文的格式。一个HTTP请求报文一般包括请求行、首部和实体(有时包含)3部分,下图给出了请求报文的一般格式,

 请求报文

一个HTTP响应报文一般包括状态行、首部和实体(有时包含)3部分,其报文格式如图所示。在响应报文中,状态行定义了响应报文的状态,并由响应状态码和响应状态码说明字段反应。


响应报文

这里我们用一个比较熟悉的例子来理解HTTP的无状态性,如一个多图片网页的浏览。步骤为:①建立连接,客户端发送一个网页请求,服务器端返回一个html页面(这里的页面只是一个纯文本的页面,也就是我们写的html代码),关闭连接;②浏览器解析html文件,遇到图片标记得到url这时,客户端和服务器再建立连接,客户端发送一个图片请求,服务器返回图片应答,关闭连接。(这里又涉及到无状态定义:对于服务器来说,这次的请求虽然是同一个客户端的请求但是服务器还是不知道这个是之前的哪个客户端的,及对于事务处理没有记忆能力)。

但是需注意的是,服务器的响应次序必须是和客户端请求次序相同的。而无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

我会在下文介绍Cookie与Session。

0 0