告别等待!HTTP分块Chunk传输让客户端响应更迅速数据即时呈现

0x01 前言

HTTP分块传输(Chunked Transfer Encoding)是一种HTTP协议在数据传输时的编码格式,它允许将数据分成若干个块进行传输。每个传输的块都包含大小信息和实际的数据内容。让服务器发送大型文件或流数据时不必一开始就发送全部内容,而是可以分成一块一块的数据来发送。这样可以节省带宽和内存,特别是对于需要长时间连接的情况。

分块传输编码

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
 
25\\\\r\\\\n
This is the data in the first chunk.
\\\\r\\\\n
This is the second chunk in the response.
\\\\r\\\\n
The final chunk of data
\\\\r\\\\n
0\\\\r\\\\n
\\\\r\\\\n

在这个例子中,服务器使用Transfer-Encoding: chunked头部来告知客户端它将使用分块传输编码。响应的主体被分成多个块,每个块前面都有一个十六进制的数字标记其大小,紧跟着是十六进制的换行符\\\\r\\\\n。最后一个块的大小为0,表示数据已经结束,随后的\\\\r\\\\n是HTTP响应的最后的空行。

HTTP分块传输常用于在不知道响应内容长度情况下传输数据。例如,当服务器需要生成大量数据或数据需要动态生成时,它可以使用HTTP分块传输来在响应正在生成时向客户端传输数据。

HTTP分块传输中,每个块使用十六进制数表示的大小信息开头,并以\\\'\\\\r\\\\n\\\'换行符结束。该大小信息表示块包含的字节数。块的实际数据由该大小信息所指定的数量的字节组成,并以\\\'\\\\r\\\\n\\\'结束。最后一个块的大小信息为0,后面跟着一个空白的\\\'\\\\r\\\\n\\\',表示所有的块都已传输完成。

HTTP分块传输不仅适用于响应内容的传输,还可以用于请求数据的发送,在渗透的过程中,当我们遇到网站存在waf的情况,我们就可以利用HTTP分块传输来绕过waf的检测。

0x02 传输格式

HTTP分块传输是HTTP协议的一种数据编码方式,其传输格式如下:

chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
...
chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
0 CRLF
footer1-name: footer1-value CRLF
footer2-name: footer2-value CRLF
CRLF

其中,chunk-size表示当前块的字节数,并以十六进制数字表示,chunk-extension可选,表示当前块的扩展信息,使用分号和值进行分隔。CRLF表示回车换行符。chunk-data表示当前块的数据内容。所有块的数据内容累加起来就是完整的实体正文。

最后一个长度为0的块表示传输结束。

在传输过程中,每个块都需要以chunk-size开始并加上后缀CRLF,接下来是chunk-data,最后也要以CRLF结束。

如果有多个块,则依次传输,每个块之间也要用CRLF分隔。

在所有块发送完成后,可以选择添加一个或多个实体报头字段,这些字段被称为报尾或尾部(footers)。报尾同样需要以CRLF结束。

总之,HTTP分块传输用于在HTTP协议中动态传输数据,其传输格式是由块大小和块数据组成,可以在数据生成过程中逐步传输数据,提高效率和安全性。

0x03 应用案例

客户端和服务端在进行HTTP分块传输时,需要注意以下几点:

  1. 客户端需要在请求头部添加Transfer-Encoding: chunked,告知服务端使用分块传输方式。
  2. 服务端需要在响应头部添加Transfer-Encoding: chunked,告知客户端使用分块传输方式。
  3. 服务端需要将所有数据按照块的格式进行封装并发送给客户端。

服务端

服务端使用workerman/http-client实现。workerman/http-client 是一个异步http客户端组件。所有请求响应异步非阻塞,内置连接池,消息请求和响应符合PSR7规范。

使用 Moonshot 提供基于 HTTP 的 API 服务接入。【

原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49759.html

(0)
网络技术联盟站's avatar网络技术联盟站
上一篇 2024年5月11日 上午4:47
下一篇 2024年5月11日 上午4:49

相关推荐

  • sase sdp(se与sd区别)

    来源:网络技术联盟站  随着云计算、移动互联网和边缘计算的快速发展,企业对网络和安全的需求也在不断演变。两个重要的网络技术解决方案,即Secure Access Serv…

    2024年4月12日
    0
  • 网页的基本元素是什么?

    在设计网页时,我们应该组织页面的基本元素,同时配合一些特效,形成一个色彩丰富的网页。网页由文本,图像和超链接组成。内容是网站的灵魂,文本是网站灵魂的物质基础。文

    2024年9月22日
    0
  • 如何评判一个人是否有价值?

    授权基于:CCO协议  如何评判一个人是否有价值,主要是看他给别人带来的贡献。简单点说:是否被别人需要? 大多数人为一件事、一家企业贡献了很多很多,到头来为什么他们还是不…

    网站运维 2024年4月12日
    0
  • 为什么中国编程水平不行

    编程水平受多种因素影响,如教育体系、实践机会、创新环境和文化因素等。中国的编程水平并非不行,而是在某些方面还在追赶世界先进国家。特别值得一提的是教育系统的作用。计算机科学教育在我国…

    网站运维 2024年5月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注