分享

HTTP 响应字段 Transfer-Encoding 赋值成 chunked 的作用介绍

 汪子熙 2023-10-26 发布于上海

Transfer-Encoding: chunked 是 HTTP/1.1 协议中定义的一种数据传输方式。在 HTTP/1.1 之前,HTTP 协议的响应数据通常是一次性发送的,也就是说,服务器必须把所有的响应数据准备好后,一次性发送给客户端。这种方式的缺点是,如果响应数据很大,或者数据的产生需要花费一定的时间,那么服务器就需要维持一个开放的连接,等待所有数据准备就绪才能发送,这无疑会增加服务器的负担,也会让客户端长时间等待,影响用户体验。

为了解决这个问题,HTTP/1.1 引入了 chunked 传输编码方式。所谓 "chunked",就是将数据分块(chunk)传输。服务器在发送响应头时,不再提供 Content-Length 字段(或者 Content-Length 字段的值为 0),而是使用 Transfer-Encoding: chunked 字段,告诉客户端,响应数据将以多个块(chunk)的形式发送。每个数据块包含两部分:块大小和块数据。块大小是一个十六进制的数字,表示接下来的块数据的字节长度。块数据是实际的数据内容。每个块后面都跟一个空行(CRLF)。当所有的数据发送完毕后,服务器会发送一个大小为 0 的块,表示数据传输结束。

这种方式的优点是,服务器可以边产生数据边发送,不需要等待所有数据都产生完毕。客户端也可以边接收数据边处理,不需要等待所有数据都接收完毕。这样就可以减少服务器的负担,提高数据传输的效率,改善用户体验。

举例来说,如果服务器要发送的数据是 "Hello, World!",并且服务器决定每 5 个字符作为一个块,那么服务器发送的数据可能是这样的(每行后面的 CRLF 在这里没有显示出来):

5
Hello
2
, 
5
World
1
!
0

客户端收到这些数据后,会根据块大小读取相应的块数据,然后把所有的块数据拼接起来,得到最终的数据 "Hello, World!"。

在实际应用中,Transfer-Encoding: chunked 常常用于发送动态生成的内容,比如网页的实时更新、视频的实时流、大文件的下载等。

以上就是 Transfer-Encoding: chunked 的基本含义和用法。希望对你有所帮助。要注意,虽然 chunked 传输编码方式很有用,但是并不是所有的 HTTP 客户端和服务器都支持这种方式,特别是一些旧的或者简单的 HTTP 客户端和服务器。在使用时,需要确保两端都支持 HTTP/1.1 协议才行。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多