03 前端HTTP协议(图解HTTP) 之 HTTP报文内的HTTP信息

本文详细介绍了HTTP协议中的报文格式,包括请求与响应报文的结构、报文主体和实体主体的区别、内容编码如gzip和分块传输编码的作用、多部分对象集合的应用场景以及范围请求的实现方法等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. HTTP 报文

用于HTTP协议交互的信息被称为HTTP报文。请求端的叫请求报文,服务端的叫响应报文。是由多行(CR+LF作为换行符)数据构成的字符串文本

HTTP报文= 报文首部 + 报文主体(非必要)
复制代码
  • 请求行: 包含请求的方法,请求的URI, HTTP 版本
  • 响应行: 响应结果的状态码,原因短语,HTTP 版本
  • 首部字段: 包含表示请求和响应的各种条件和属性的各类首部(通用首部,响应首部,请求首部和实体首部)
  • 其他:可能包含HTTP的RFC(Request For Comments,征求意见稿)里未定义的首部(Cookie等)


2. 报文主体和实体主体

报文(message): 是HTTP通信基本单位,由8位组字节流组成,通过HTTP通信传输
实体(entity): 作为请求和响应的有效载荷数据(补充项)被传输,其内容由实体首部+实体主体组成。

  • HTTP报文的主体:用于传输请求和响应的实体主体。
  • 报文主体通常等于实体主体,如果传输过程中进行了编码操作,实体内容发生变化,才回导致和报文主体产生差异

3. 压缩传输的内容编码

内容编码:实体内容上的编码格式,并保存实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

  • gzip(GNU zip)
  • compress(UNIX 系统的标准压缩)
  • deflate(zlib)
  • identify(不进行编码)


4. 分割发送的分块传输编码

分块传输编码(Chuncked Transfer Coding): 在HTTP通信中,请求的编码实体为全部传输完毕之前,页面时无法显示的。因此在传递大容量数据时,将数据分割为多块,每一块都会使用十六进制进行标记块大小,最后一块实体主体使用0(CR+LF)标记,客户端负责接收解码,恢复编码前的实体主体,让浏览器逐步显示。


5. 发送多种数据的多部分对象集合(Multipart)

多部分对象集合(Multipart): 容纳多份不同类型的数据,发送的一份报文主体内科含有多类型实体。通常在图片或文本文件等上传时使用。
相关首部字段是Content-type,多部分对象集合包含的对象如下:

  • multipart/form-data: 在Web表单上传时使用
  • multipart/byteranges: 状态码 206(Partial Content, 部分内容) 响应报文包含了多个范围的内容时使用

6. 获取部分内容的范围请求

范围请求(Range Request):如果下载一个较大的资源,但是到中途中断,需要一种恢复机制,从之前的下载中断处恢复下载。要实现该功能,需要指定下载的实体范围。
例如请求一个10000字节的图片,分范围获取:


// 请求:
// 表示图片的50001 - 10000 字节( 5001- :表示5001到最后, -5000: 表示开始到5000字节)
Range: bytes=5001-10000

// 响应:对于多重范围的范围请求, 响应会在首部字段 ContentType 标明 multipart/byteranges 后返回响应报文
复制代码

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

内容协商机制(Content Negotiation):当一个Web网站存在多分相同内容的页面(英文版和中文版),当浏览器默认语言为英文,则会显示英文版。
内容协商会以响应资源的语言、字符集、编码方式等作为基准。包含在请求报文中的某些字段就是判断基准:

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

内容协商技术有三种方式:

  • 服务器驱动协商:以请求的首部字段为参考,在服务端自动处理(对于用户来说,是以浏览器发送的信息为基准,不一定是最优的)
  • 客户端驱动协商:用户从浏览器显示的可选择列表中自动选择。 还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选 择。
  • 透明协商:服务端驱动和客户端启动结合,由服务端可客户端各自进行内容协商的一种方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值