HTTP请求头、响应头详解

HTTP的头域包括通用头、请求头、响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成(说白了就是键值对)。

  • 通用头:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
  • 请求头:是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
  • 响应头:便于客户端提供信息,比如,客服端在与哪种类型的服务器进行交互,如Server头部。
  • 实体头:指的是用于应对实体主体部分的头部,比如,可以用实体头部来说明实体主体部分的数据类型,如Content-Type头部。

HTTP请求报文解剖 

HTTP请求报文由3部分组成(请求行+请求头+请求体): 

 

下面是一个实际的请求报文: 

 

①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,Spring 3.0提供了一个HiddenHttpMethodFilter,允许你通过“_method”的表单参数指定这些特殊的HTTP方法(实际上还是通过POST提交表单)。服务端配置了HiddenHttpMethodFilter后,Spring会根据_method参数指定的值模拟出相应的HTTP方法,这样,就可以使用这些HTTP方法对处理方法进行映射了。 

②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL,③是协议名称及版本号。 

④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。 

⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。 

对照上面的请求报文,我们把它进一步分解,你可以看到一幅更详细的结构图: 

 

  • Host:www.baidu.com      本次请求访问的主机地址(虚拟主机名称)
  • Cache-control:no-cache        设置网页缓存的使用方法
  • Pragma:no-cache
  • Accept:text/html,xxxxxx…..客户端可以接收的数据类型(如果内容是:*/*,表示接收所有类型)
  • User-Agent:Mozilla/5.0xxxxx 主要表示客户端类型
  • Accept-Encoding:gzip,deflate,sdch 浏览器能够接收的数据压缩编码方式(表示浏览器能够接收什么格式的压缩的数据)
  • Accept-Language:zh-CN,zh;q=0.8 浏览器期望的接受的语言种类
  • Accept-Charset: ISO-8859-1      客户端所接收的字符集编码
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT   和缓存机制相关的头

  • Referer: http://www.smyh.me/index.jsp   当前页面来自哪个页面(可能是由之前的页面通过超链接点进到这个页面来)
  • Cookie
  • Connection: close/Keep-Alive   请求完之后,是关闭此连接,还是继续保持连接
  • Date: Tue, 11 Jul 2013 18:23:51 GMT 当前请求的时间

HTTP响应报文解剖 

响应报文结构 

HTTP的响应报文也由三部分组成(响应行+响应头+响应体): 

 

以下是一个实际的HTTP响应报文: 

 

①报文协议及版本; 
②状态码及状态描述; 
③响应报文头,也是由多个属性组成; 
④响应报文体,即我们真正要的“干货”。 

  • Location: http://www.smyh.me/index.jsp    重定向(302+Location实现重定向)  
  • Server                       服务器类型
  • Content-Encoding       服务器当前返回给客户端的数据压缩格式
  • Content-Length          返回给客户端的数据量的大小
  • Content-Language: zh-cn  语言种类
  • Content-Type: text/html; charset=GB2312        返回的数据的类型、字符集编码方式
  • Last-Modified             资源最后一次修改的时间(配合请求头中的If-Modified-Since+304/307实现缓存机制)
  • Refresh: 1;url=http://www.it315.org    隔多少秒以后,让当前页面去访问哪个地址(例如网页登陆成功后,跳回原来的界面,就是用的这个头)
  • Content-Disposition: attachment;filename=aaa.zip   和下载相关,通知浏览器以附件的形式下载服务器发送过去的数据
  • Transfer-Encoding: chunked  数据传输模式
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search     和cookie相关的头
  • ETag: W/"83794-1208174400000"       和cookie相关的头
  • Expires: -1        通知浏览器是否缓存当前资源:如果这个头的值是一个以毫秒为单位值,则通知浏览器缓存资源到指定的时间点;如果值是0或-1,则通知浏览器禁止缓存
  • Cache-Control: no-cache   通知浏览器是否缓存资源
  • Pragma: no-cache         -- 通知浏览器是否缓存资源

注: 之所以三个头是一个功能,是因为历史原因。不同的浏览器对这三个头支持的不同,一般来说这三个头要同时使用,以确保不同的浏览器都能实现控制缓存的功能

  • Connection: close/Keep-Alive   是否继续保持连接
  • Date: Tue, 11 Jul 2000 18:23:51 GMT    当前响应的时间

猜你喜欢

转载自blog.csdn.net/DuTianTian_csdn/article/details/82755848