2013的双12即将到来,网上购物是大家所熟悉的。看中小米电视时,可以先下订单然后再付款,电商根据订单将小米电视正确安全的送达给我们。包裹包含电视的基本信息及电视的使用说明书,使我们能够初步的了解它的基本情况及指导我们怎么去使用它。订单和使用说明书是客户与电商沟通的桥梁,指引他们在网上购物。当然基于Http协议的网络通信,客户端和服务器也需要一种东西作为两者沟通的桥梁---Http报文,客户端和服务器分别主要指浏览器和Web服务器。下面以Http报文存在的意义、类型及组成成分展开讲述。
Http报文存在的意义
Http报文是客户端与服务器之间互相传送的数据块,这些数据块以一些文本形式的元信息开头,描述报文的内容及含义(订单及使用说明书),后面跟着可选的数据部分(电视)。客户端和服务器会解析报文的含义执行对应的操作。比如,jsp里response.sendRedirect(url),Web服务器就会发送一个300-399之间的状态码和Location首部告诉浏览器重新请求Location指定的URL。如果浏览器需要与Web服务器持久连接,那么前者就需要发送Connection:keep-alive报头告诉后者处理完请求后不要关闭连接,后者需要关闭连接就需发送Connetion:close告诉前者已关闭连接。在基于Http协议的网络通信过程中,客户端和服务器之间的通信只能依靠Http报头。换句话说,没有Http报文,客户端就不能与服务器通信。
Http报文的类型及组成成分
Http报文主要包含请求报文和响应报文。报文包括以下格式
起始行:报文的第一行,在请求报文中说明要做些什么,在响应报文中说明发生了什么
首部字段:起始行后面有零个或多个首部字段,首部以一个空格结束。比如Content-Length:300,表示响应主体的长度
主体:请求主体包含要发送给服务器的数据,响应主体包含要返回给客户端的数据,如下图
起始行包括请求行和响应行,请求行的格式:
响应行的格式:
。
Http协议的报头是千变万化的,我们不可能记住所有报头代表的含义。所以需要了解报头每个部分代表的意义和进行归类。
<method>:客户端告知服务器对资源执行的动作。比如GET,POST,HEAD
<version>:之所以客户端和服务器都需要返回和发送http的版本,是因为每个版本的http的报头都有差异,比如http1.0有持久连接的特性,而http0.9没有,客户端和服务器会根据http的版本在解析报头的时候做出正确的判断后再执行相应的动作。
<status>:服务器告诉客户端这次请求事务的结果,是失败还是成功还是...
<headers>:首部主要包括通用首部、请求首部、响应首部及主体首部。
通用首部:可以出现在请求报头和响应报文中。比如,Date,Connection
请求首部:仅出现在请求报文,比如,referer,host
响应首部:仅出现在响应报文,比如,Server
主体首部:描述主体,比如contentType,contentLength
<entity>:真正数据存放的地方。