HTTP报文介绍

报文是HTTP通信中的基本单位 [ 由8 位字节流组成 ]

报文类型

  • 请求报文

请求报文由 【请求方法】【请求URI】【http协议版本】【请求首部字段】【内容实体构成】

  • 响应报文

响应报文由 【协议版本】【状态码】【状态码解释短语】【可选的响应首部字段】【内容实体】

报文内容

  • 报文首部 :内容和属性
  • 报文主体 :传输的数据

报文首部和报文主体通过空行分割

报文结构

  • 请求行/响应行

请求行 :【请求方法】 + 【URI】 + 【HTTP协议版本号】
响应行 :【状态码】 + 【状态码解释短语】 + 【HTTP 协议版本】

  • 请求首部字段 / 响应首部字段
  • 通用首部字段
  • 实体始于字段

    通过编码提升速度

  • 压缩传输内容的编码

    1. gzip ( GNU zip )
    2. compress ( UNIX 系统的标准压缩 )
    3. deflate ( zlib )
    4. identify ( 不进行编码 )
  • 分割发送的分块传输编码在传输大量内容时,通过将数据分割成多块,能够让浏览器逐步显示页面,分块传输码会将实体主体分割成多个部分( 块 )。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用 【 0(CR + LF ) 】来标记

    发送多种数据的多部分对象集合

    发送的一份报文主体可含有多种类型的实体。( 通常在是上传文件或者图片的时候使用 )

  • 多部分对象集合包含的对象如下

    1. multipart / form-data : 在web上传表单的时候使用
    2. multipart / byteranges : 状态码206,响应报文包含多个范围内容的时候使用 【分段上传】

      内容协商返回最合适的内容

  • 服务器驱动协商

  • 客户端驱动协商
  • 透明协商 ( 服务器驱动+ 客户端驱动 )

    常见状态码

    | | | | | —- | —- | —- | | 状态码 | 状态码描述短语 | 备注 | | 200 | OK | | | 204 | No Content | 请求已成功处理,但响应中不含报文主体即数据 | | 206 | Partical Content | 分段范围请求成功 | | 301 | Moved Permanently | 永久性重定向,通过响应报文的location字段指定新的URL | | 302 | Found | 临时性重定向 | | 303 | See Other | 资源的URI 已经更新,应使用GET 访问新的URL | | 304 | Not Modified | 资源已找到,但未符合条件请求,不包含任何响应主体 | | 307 | Temporary Rediect | 临时重定向 |

WEB 服务器相关知识

  • 代理 : 客户端和服务端的中间人,具有转发功能的应 用程序。

代理转发时需要附加Via 字段标记经过的主机信息
使用代理的优点: 利用【缓存】技术【减少网络带宽】、组织内部针对特定的网站的设置【访问控制】、【获取访问日志】

  • 网关 : 利用网关可以实现将HTTP请求转换为其它通信协议
  • 隧道 :建立一条与其它服务器的通信线路,确保客户端能与服务器进行安全的通信

    重要的HTTP首部字段

  • content-type :报文主体对象的媒体类型

  • cache-control :操作缓存相关指令 | | | | | —- | —- | —- | | 指令 | 参数 | 说明 | | no-cache | - | 每次都得向源服务器确认 | | no-store | - | 彻底不使用缓存 | | max-age=[秒] | 必须 | | | max-state=[秒] | 可省略 | 接受已过期的响应,即响应过期多少秒以内仍可使用 | | min-fresh=[秒] | 必须 | 期望在指定时间内响应仍有效 |

  • Via : 追踪客户端与服务器之间的请求和响应报文的传输路径 ( 跟踪经过的代理和网关 )

  • Accept : 告知服务器,客户端能够处理的媒体类型及其优先级,反之亦然使用q= 来表示优先级,优先级范围0—1 ,1为最大值
  • Accept-Charset : 告知服务器支持的字符集及其优先级,反之亦然
  • Accept-Encoding : 告知服务器支持的内容编码及其优先级,反之亦然
  • Host : 告知主机名
  • Range : 范围请求,如果服务器支持则返回状态码206及请求的范围资源,否则返回200和全部资源
  • User-Agent : 浏览器的种类
  • Age : 源服务器在多久前建立的响应
  • Etag : 资源的标记,由服务器分配
  • Location : 重定向时用于指定新的URL