uni*_*n83 25 http chunking chunked-encoding http-chunked
我正在为透明代理编写HTTP解析器.什么让我感到困惑的是Trailer:规格中提到的Transfer-Encoding: chunked.它是什么样子的?
通常,HTTP chunked会像这样结束.
0\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)
我感到困惑的是如果有某种尾随标题,如何检测块的结尾...
更新:我相信一个简单的\r\n\r\n即空行足以检测尾随标题的结尾......这是正确的吗?
app*_*eaf 16
下面是我从"TCP/IP指南"站点复制的示例预告片的副本.

我们可以看到,如果我们想要使用预告片头,我们需要添加一个带有标题名称的"Trailer:header_name"标题字段,然后在分块的正文区域之后添加预告片标题实体.
我们可以根据RFC在HTTP正文中添加0个或更多个预告片头.RFC7230的 4.1.2节禁止在预告片标题区域中使用以下标头:
发送方不得生成包含消息成帧所需字段(例如,传输编码和内容长度),路由(例如,主机),请求修饰符(例如RFC7231第5节中的控制和条件),认证的预告片(例如,参见 RFC7235和RFC6265),响应控制数据(例如,参见RFC7231的第7.1节),或确定如何处理有效载荷(例如,内容编码,内容类型,内容范围和预告片).
这意味着我们可以在预告片标题区域中使用其他标准标头和自定义标头.
uni*_*n83 15
0\r \n
SomeAfterHeader:TheData \ r \n
\ r \n
换句话说,\r\n\r\n用外行的术语来寻找a就足够了:一条空行.检测分块传输的结束.但是在执行此操作之前读取每个块非常重要.因为分块数据本身可以包含空行,这些空行将被错误地检测为流的末尾.
jam*_*iss 15
关于预告片:
如您所述,应在"预告片"标题中指定尾随标题列表.
RFC 2616第14.40节中的BNF 是这样的:
Trailer = "Trailer" ":" 1#field-name
Run Code Online (Sandbox Code Playgroud)
Gourley和Totty给出了这个例子:
Trailer: Content-Length
Run Code Online (Sandbox Code Playgroud)
(他们给出这个例子很奇怪,因为在14.40中明确禁止Content-Length成为尾随标题.)
Shiflett给出了这个例子:
Trailer: Date
Run Code Online (Sandbox Code Playgroud)
关于带尾随标题的消息结束:
RFC 2616的3.6.1节中的BNF 是您正在寻找的.这是部分:
Chunked-Body = *chunk
last-chunk
trailer
CRLF
last-chunk = 1*("0") [ chunk-extension ] CRLF
trailer = *(entity-header CRLF)
Run Code Online (Sandbox Code Playgroud)
所以最后一个块和两个尾随标头可能如下所示:
0<CRLF>
Date:Sun, 06 Nov 1994 08:49:37 GMT<CRLF>
Content-MD5:1B2M2Y8AsgTpgAmY7PhCfg==<CRLF>
<CRLF>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17959 次 |
| 最近记录: |