全网分析HTTP协议最全的一篇文章,程序员赶紧收藏( 三 )


  • 状态行 —— 包含表明响应结果的状态码、原因短语和 HTTP 版本 。
  • 首部字段 —— 包含表示请求的各种条件和属性的各类首部 。(通用首部、响应首部、实体首部以及RFC里未定义的首部如 Cookie 等)
响应报文的示例,如下:
全网分析HTTP协议最全的一篇文章,程序员赶紧收藏

文章插图
响应报文示例
五、HTTP 报文首部之请求行、状态行1.请求行
举个栗子,下面是一个 HTTP 请求的报文:
GET /index.htm HTTP/1.1Host: sample.com其中,下面的这行就是请求行,
GET /index.htm HTTP/1.1
  • 开头的 GET 表示请求访问服务器的类型,称为方法;
  • 随后的字符串 /index.htm 指明了请求访问的资源对象,也叫做请求 URI;
  • 最后的 HTTP/1.1,即 HTTP 的版本号,用来提示客户端使用的 HTTP 协议功能 。
综合来看,大意是请求访问某台 HTTP 服务器上的 /index.htm 页面资源 。
2.状态行
同样举个栗子,下面是一个 HTTP 响应的报文:
HTTP/1.1 200 OKDate: Mon, 10 Jul 2017 15:50:06 GMTContent-Length: 256Content-Type: text/html <html>...其中,下面的这行就是状态行,
HTTP/1.1 200 OK
  • 开头的 HTTP/1.1 表示服务器对应的 HTTP 版本;
  • 紧挨着的 200 OK 表示请求的处理结果的状态码和原因短语 。
六、HTTP 报文首部之首部字段(重点分析)1.首部字段概述
先来回顾一下首部字段在报文的位置,HTTP 报文包含报文首部和报文主体,报文首部包含请求行(或状态行)和首部字段 。
在报文众多的字段当中,HTTP 首部字段包含的信息最为丰富 。首部字段同时存在于请求和响应报文内,并涵盖 HTTP 报文相关的内容信息 。使用首部字段是为了给客服端和服务器端提供报文主体大小、所使用的语言、认证信息等内容 。
2.首部字段结构
  • HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:”分隔 。
  • 另外,字段值对应单个 HTTP 首部字段可以有多个值 。
  • 当 HTTP 报文首部中出现了两个或以上具有相同首部字段名的首部字段时,这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,优先处理的顺序可能不同,结果可能并不一致 。

全网分析HTTP协议最全的一篇文章,程序员赶紧收藏

文章插图
 
3.首部字段类型
首部字段根据实际用途被分为以下4种类型:
全网分析HTTP协议最全的一篇文章,程序员赶紧收藏

文章插图
 
4.通用首部字段(HTTP/1.1)
全网分析HTTP协议最全的一篇文章,程序员赶紧收藏

文章插图
 
4.1 Cache-Control
通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制 。
4.1.1 可用的指令一览
可用的指令按请求和响应分类如下:
缓存请求指令
全网分析HTTP协议最全的一篇文章,程序员赶紧收藏

文章插图
 
缓存响应指令
全网分析HTTP协议最全的一篇文章,程序员赶紧收藏

文章插图
 
4.1.2 表示能否缓存的指令
public 指令
Cache-Control: public当指定使用 public 指令时,则明确表明其他用户也可利用缓存 。
private 指令
Cache-Control: private当指定 private 指令后,响应只以特定的用户作为对象,这与 public 指令的行为相反 。缓存服务器会对该特定用户提供资源缓存的服务,对于其他用户发送过来的请求,代理服务器则不会返回缓存 。
no-cache 指令
Cache-Control: no-cache
  • 使用 no-cache 指令是为了防止从缓存中返回过期的资源 。
  • 客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接收缓存过的响应 。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器 。
  • 如果服务器中返回的响应包含 no-cache 指令,那么缓存服务器不能对资源进行缓存 。源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作 。
Cache-Control: no-cache=Location由服务器返回的响应中,若报文首部字段 Cache-Control 中对 no-cache 字段名具体指定参数值,那么客户端在接收到这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存 。换言之,无参数值的首部字段可以使用缓存 。只能在响应指令中指定该参数 。
no-store 指令


推荐阅读