HTTP/1.1指定作为Transfer-Encoding: chunked发送的响应可以包括可选的拖车(即。通常作为标题发送的内容,但无论出于什么原因,都不能在内容之前进行计算,因此可以将其追加到末尾),例如:
请求:
GET /trailers.html HTTP/1.1
TE: chunked, trailers响应:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Trailer: My-Test-Trailer
D\r\n
All your base\r\n
B\r\n;
are belong\r\n
6\r\n
to us\r\n
0\r\n
My-Test-Trailer: something\r\n
\r\n此请求在TE头中指定它期待一个chunked响应,并将在最后一个块之后查找trailers。
响应在Trailer头中指定它将要发送的拖车列表(在本例中,只指定一个:My-Test-Trailer)。
每个块被发送为:
D = 13),然后是CRLFAll your base),后面是一个CRLF零大小块(0\r\n)表示身体的结束。
然后指定预告片(My-Test-Trailer: something\r\n),然后是最后的CRLF。
现在,从我所读到的所有东西来看,拖车很少被使用(如果有的话)。大多数关于拖车的这里和其他方面的讨论通常以“但你为什么要使用拖车?”开始。
出于好奇,我一直在尝试模拟使用预告片的HTTP请求/响应交换(HTTP request/response exchange ),但到目前为止,我还无法让它工作,我也不确定我正在生成的响应是否有问题,或者(正如一些人所建议的那样)是否根本没有客户端寻找尾随的标题。
我试过的客户包括: curl,wfetch,Chrome + jQuery。
在所有情况下,客户端接收并正确地重新构造块响应(All your base are belong to us);我可以在响应头中看到Trailer: My-Test-Trailer正在发送的响应头;但我没有看到在响应头或任何地方返回的My-Test-Trailier: something。在接收到整个响应并关闭连接之后,这样的尾随头是否应该作为正常的响应头出现在客户机中还不清楚?
有趣的是,卷曲变化日志似乎表明curl确实支持可选的拖车,而curl将处理它找到的任何进入正常的标头流拖车。
有没有人知道:
发布于 2018-01-10 04:13:40
问这个问题已经过去5年了,我现在可以自己回答了。
Mozilla刚刚宣布,他们将支持新的Server-Timing字段作为HTTP后继报头(这是他们第一次支持拖车)。
然而,更重要的是,他们确认它将被白化,因此Server-Timing是唯一的支持值(着重于我):
服务器定时是HTTP预告片,而不是报头。mcmanus告诉我,我们目前解析拖车,但随后默默地将它们扔掉。我们一般不想改变这种行为(我们不想鼓励预告片),所以我们想要白名单服务器定时预告片,将它存储在某个地方(可能只是一个mServerTiming头暂时可以工作,因为它是我们支持的唯一预告片),然后通过一些新的channel.getTrailers()调用使其可用。
因此,我想这是一劳永逸地证实了这一点: Moz不支持尾随标头(也不可能是一般意义上的),所有其他浏览器供应商也可能采取相同的立场。
发布于 2016-08-16 00:16:46
发布于 2014-03-20 03:56:48
自此承诺以来,Jodd HTTP客户端支持拖车头。
关于第一个问题,我还没有找到任何使用它们的实时响应;)
https://stackoverflow.com/questions/13371367
复制相似问题