Skip to content

Latest commit

 

History

History
61 lines (43 loc) · 2.38 KB

3章HTTP报文.md

File metadata and controls

61 lines (43 loc) · 2.38 KB
layout title
default
{"site.name" => nil}

3章HTTP报文

用于HTTP协议交互的信息称为HTTP报文。请求端的叫做请求报文。响应端的叫做响应报文。HTTP报文本身是由多行数据构成的字符串文本。

大致可以分为报文首部和报文主体两块,由最初的空行来划分。通常不一定有报文主体。

请求与响应报文的结构

请求报文:

  • 请求行:包含用于请求的方法,请求URI和HTTP版本
  • 请求首部字段
  • 通用首部字段
  • 实体首部字段
  • 其他(可能包含HTTP的RFC里的未定义首部,比如cookie)
  • 空行
  • 报文主体

响应报文:

  • 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
  • 响应首部字段
  • 通用首部字段
  • 实体首部字段
  • 其他
  • 空行
  • 报文主体

注:cookie并不是在HTTP的RFC里的,他是IETF的另一个规范HTTP状态规范里的。不过也没必要深究,都是规范就是了。

编码提升传输效率

就是讲内容进行压缩后再传给客户端,用户端再进行解码,内容编码有以下几种:Gzip,compress,deflate,identity

分块传输编码

就是将实体主体分为多个部分,每一块都用16进制来标记大小。

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

比如邮件采用了MIME,于是我们可以添加文本,图片,视频等多种不同类型的数据。

HTTP协议里面也采纳了多部分对象集合。

  • multipart/form-data:web表单文件上传时使用
  • multipart/byteranges:报文包含多个范围的内容时使用,每个部分都可以有自己的头部

获取部分内容的范围请求

下载过程中如果出现了中断,就需要恢复的机制,就是从之前中断处恢复下载。

就是指定范围发送的请求。

Range: bytes=-3000,5000-10000

还可以发送多个范围的请求

范围请求如果支持的话,会返回206的结果好报文,如果是多范围的话,那就是multipart/byteranges的结果。如果不支持的话,那就是状态码200和完整的实体内容。

这个功能得是后端支持的,目前在前端界还没有使用过,因为前端也没有下载大量数据的需求

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

服务器来根据内容返回,或者客户端自动根据UA来跳转,或者服务器和客户端各自进行内容协商的方法。