chunked_transfer_encoding 指令

语 法:chunked_transfer_encoding on | off;

默认值:chunked_transfer_encoding on;

上下文:http, server, location

允许在 HTTP/1.1 中禁用分块传输编码。尽管标准有要求,但在使用无法支持分块编码的软件时,它可能会派上用场。

什么是 Transfer-Encoding?

Transfer-Encoding 是一个 HTTP 头部字段,字面意思是「传输编码」。

在通过 HTTP 传送数据时,有些时候并不能事先确定 body 的长度,因此无法得到 Content-Length 的值,就不能在 header 中指定 Content-Length,造成的最直接的影响就是:接收方无法通过 Content-Length 得到报文体的长度。那怎么判断发送方发送完毕了呢?

HTTP 1.1 协议在 header 中引入了 Transfer-Encoding,历史上 Transfer-Encoding 可以有多种取值,为此还引入了一个名为 TE 的头部用来协商采用何种传输编码。但是最新的 HTTP 规范里,只定义了一种传输编码:分块编码(Transfer-Encoding: chunked)。

chunked 分块编码格式

如果一个 HTTP 消息(请求消息或应答消息)的 Transfer-Encoding 消息头的值为 chunked。那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束。

每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个CRLF (回车及换行),然后是数据本身,最后块CRLF结束。在一些实现中,块大小和CRLF之间填充有白空格(0x20)。

最后一块是单行,由块大小(0),一些可选的填充白空格,以及CRLF。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。

消息最后以CRLF结尾。

示例

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
 
25
This is the data in the first chunk
 
1C
and this is the second one
 
3
con
 
8
sequence
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号