HTTP的Transfer-Encoding头部有哪些取值?

  • Post category:Python

HTTP协议的Transfer-Encoding头部用于指定传输时数据的编码方式。下面详细讲解一下这个头部的取值和含义:

头部取值

chunked

指定使用分块编码方式传输。在传输响应体时,服务器将响应体划分为多个大小不同的块,每个块都会以单独的指示块长度的16进制数码开头,并使用CRLF作为行尾标示。最后以一个块长度为0的标示块结束整个响应体的传输。

compress

指定使用压缩编码方式传输,编码方式为Unix下压缩工具compress格式。该编码方式较为古老,已经不太使用。

deflate

指定使用Deflate算法压缩后传输数据。Deflate是一种通用的压缩算法,由于压缩率高,所以该编码方式是HTTP传输中较为常用的一种。

gzip

指定使用gzip格式压缩后传输数据,是HTTP传输中最广泛使用的一种压缩方式,因为具有压缩率高和可逆性好的特点。

identity

指定不对数据进行编码,即使用标准的ASCII字符集进行转换和传输。

示例说明

下面通过两个示例说明Transfer-Encoding头部的使用方法。

示例 1:使用chunked传输

假设服务器返回的响应体内容如下:

<html>
  <body>
    <h1>Hello World</h1>
  </body>
</html>

如果服务器想要使用chunked方式进行传输,那么响应头部的Transfer-Encoding字段就需要设置为chunked,表示响应体使用分块编码进行传输。

HTTP/1.1 200 OK
Content-Type: text/html
Transfer-Encoding: chunked

25
<html>
  <body>
    <h1>Hello World</h1>
  </body>
</html>
0

上面的响应头部中,25表示第一个块的内容长度(也就是后面的html代码),之后的CRLF代表结束符,接下来是第一个块的内容,最后一个块的长度为0,标示传输结束。

示例 2:使用gzip压缩传输

假设服务器返回的响应体内容如下:

<html>
  <body>
    <h1>Hello World</h1>
  </body>
</html>

如果服务器想要使用gzip压缩方式传输,那么响应头部的Transfer-Encoding字段就需要设置为gzip,表示响应体已经使用gzip算法进行压缩。

HTTP/1.1 200 OK
Content-Type: text/html
Content-Encoding: gzip

<gzip compressed data>

上面的响应头部中,Content-Encoding字段设置为gzip代表已经使用gzip算法进行压缩,真正的压缩内容则存储在响应体中。客户端在接收到响应体时,需要先对响应体进行解压缩才能获取到真正的HTML代码。