HTTP分块编码。需要一个';拖车';在规范中提到
我正在为透明代理编写HTTP解析器。困扰我的是HTTP分块编码。需要一个';拖车';在规范中提到,http,chunked-encoding,chunking,http-chunked,Http,Chunked Encoding,Chunking,Http Chunked,我正在为透明代理编写HTTP解析器。困扰我的是传输编码:chunked规范中提到的预告片:。它看起来像什么 通常,HTTP分块的结果是这样的 0\r\n \r\n 我所困惑的是,如果存在某种尾随标头,如何检测块的结尾 更新:我认为一个简单的\r\n\r\n即一个空行就足以检测尾部标题的结尾。。。对吗 0\r\n SomeAfter标题:数据\r\n \r\n 换句话说,用外行的话说,只需查找一个\r\n\r\n,一个空行就足够了。检测分块传输的结束。但在执行此操作之前读取每个块是非常重要的。因
传输编码:chunked
规范中提到的预告片:
。它看起来像什么
通常,HTTP分块的结果是这样的
0\r\n
\r\n
我所困惑的是,如果存在某种尾随标头,如何检测块的结尾
更新:我认为一个简单的\r\n\r\n
即一个空行就足以检测尾部标题的结尾。。。对吗
0\r\nSomeAfter标题:数据\r\n
\r\n
换句话说,用外行的话说,只需查找一个
\r\n\r\n
,一个空行就足够了。检测分块传输的结束。但在执行此操作之前读取每个块是非常重要的。因为分块数据本身可能包含空白行,这些空白行将被错误地检测为流的结尾。关于尾部:
正如您所注意到的,尾部标题列表应在尾部标题中指定
BNF是这样的:
古利和托蒂举了一个例子:
Trailer: Content-Length
Trailer: Date
(奇怪的是,他们给出了这个例子,因为在14.40中,内容长度被明确禁止作为尾部标题。)
Shiflett举了一个例子:
Trailer: Content-Length
Trailer: Date
关于带有尾部标题的邮件结尾:
你要找的就是BNF。以下是部分内容:
Chunked-Body = *chunk
last-chunk
trailer
CRLF
last-chunk = 1*("0") [ chunk-extension ] CRLF
trailer = *(entity-header CRLF)
因此,最后一个区块和两个尾随标头可能如下所示:
0<CRLF>
Date:Sun, 06 Nov 1994 08:49:37 GMT<CRLF>
Content-MD5:1B2M2Y8AsgTpgAmY7PhCfg==<CRLF>
<CRLF>
0
日期:1994年11月6日星期日08:49:37 GMT
内容-MD5:1B2M2Y8AsgTpgAmY7PhCfg==
下面是我从中复制的示例拖车的副本。
正如我们所看到的,如果我们想使用拖车头,我们需要添加一个带有头名称的“拖车:头\名称”头字段,然后在分块体区域后添加拖车头实体
我们可以在每个RFC的HTTP正文中添加0个或多个拖车头。
第4.1.2节禁止在拖车收割台区域使用以下收割台:
发件人不得生成包含必需字段的尾部
对于消息帧(例如,传输编码和内容长度),
路由(如主机)、请求修改器(如控件和
第5节中的条件),身份验证(例如,参见
和),响应控制数据(例如,见第7.1节
或确定如何处理有效载荷(例如。,
内容编码、内容类型、内容范围和预告片)
这意味着我们可以在拖车标题区使用其他标准标题和自定义标题。感谢您发布此消息,我也在想同样的事情。让我恼火的是,0长度块在零长度数据之后没有自己的\r\n块。现在很清楚,我再次重读了RFC,但很高兴看到一个清晰的例子,它是如何与一些标题看起来。。。希望他们能在RFC里加上这个所以。。。如何从Gzip编码的流中检测分块部分?@Alexsandro_xpt-消息体首先被压缩,然后被分块,这样您就可以在不解压缩任何内容的情况下解码分块编码。没错,但你真的应该引用RFC 7230。谢谢你的评论,朱利安。我刚刚浏览了RFC 7230并更新了我的引文。对于chunked和trailer部分,它更清晰。这是一个很好的例子,但它的chunks长度值是错误的。固定块:
28您请求的文件长度为
和21个字节,最后一次修改:
“…用外行的话说,查找一个\r\n\r\n就足够了:一个空行。检测块传输的结束。”这对我来说似乎是错误的。非常清楚:您应该根据区块大小读取区块数据;当您找到0块大小时,您已找到最后一个块。你的其余答案很好,但我认为你应该修正这句话。@unixman83:如果你的答案不正确(正如霍克维·帕克所指出的),你应该要么改正它,要么取消将其标记为已接受的答案。不要误导用户。许多人,包括我在内,认为如此的答案是理所当然的,没有阅读所有的评论,因为它通常是值得信赖的。这似乎是一个“例外”,游客应该“抓住”!!为什么人们给出的例子仅仅是简单的例子????如果拖车中有多个标题,您会怎么做?你使用逗号分隔的列表还是什么?为什么人们不为自己阅读规范而烦恼呢????你问题的答案已经在我的答案里了。想要线索吗?这是1#field。要再来一杯吗?到这里:。