HTTP内容编码与传输编码

HTTP报文与实体

报文:HTTP通信的基本单位,由字节流组成

实体:请求或者响应的有效载荷数据,由实体首部和实体主题组成。

一般来说,实体主体作为HTTP报文的主体进行传输。

内容编码

在实体进行传输前,先将实体进行编码,然后在进行传输。常见的内容编码有:

  • gzip(GNU zip)
  • compress(UNIX系统的标准压缩)
  • deflate(zlib)
  • identity(不进行编码)
  • 在实体首部字段中,Content-Encoding会告知客户端服务器对实体的主体部分选用的编码方式
  • 对实体进行内容编码传输时,不能再使用Content-Length首部字段 

传输编码

在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主题分块的功能称为分块传输编码。

  • 用于服务器动态创建内容,无法知道主体的大小,通过分块来判断是否传输完毕。
  • 分块传输编码会将实体分为多个部分(块)。每一块都会用十六进制来标记块的大小,而实体的最后一块会使用“0(CR+LF)”来标记。 
  • 首部字段Transfer-Encoding规定了传输报文主体时采用的编码方式。HTTP/1.1的传输编码方式仅对分块编码有效。
  • Trailer会事先说明在报文主体后(分块长度为0)记录了哪些首部字段,应用于分块编码时。

 总结

  • 内容编码是在传输前进行的,一般是为了对实体主体进行压缩
  • 传输编码是在传输的过程中进行编码,在内容编码的基础上,可以继续对实体主体进行传输编码,使其可以分块传输,也可以不进行分块传输编码直接一次性进行完整传输

在网上看到一个回答非常好,粘贴到此处帮助读者更好地去理解http内容编码和传输编码的区别和作用?

参考文献

  1.  《图解HTTP》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章