你能在一个分块的http响应预告片中设置Location头吗?

时间:2011-09-21 16:40:36

标签: http web-applications

HTTP 1.1响应可以分块(spec)。在最后一个块的末尾,服务器可以发送一个“预告片”,其中包含其他标题。

问题是:您可以在预告片中添加Location标题,浏览器会通过重定向做出反应吗?

2 个答案:

答案 0 :(得分:2)

问题是要工作的Location标头应该是特定的响应代码3xx所以在标准响应中你不能使用它看到http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

答案 1 :(得分:1)

是。

要获得Location标头,服务器应使用201或其中一个3XX状态代码进行响应。它还应该包括内容,也许是用HTML解释发生了什么的消息,并提供了一个方便的资源超链接。内容需要分块,Transfer-Encoding标头应该存在并且值为“chunked”。

如果所有这些都是真的,那么可以使用“Location”值添加Trailer标题,然后Location标题可以跟踪内容。

这是真正的问题:这看似愚蠢而毫无意义。您可能在哪个用例中将客户端重定向到新位置,但在内容完成之前您还不知道该位置?我想不出一个理由。但也许你有一个?如果没有一个好的用例,那么我认为你不应该这样做。

编辑:我想到了一个原因。 Shiflett给出了一个分块传输编码的例子,其中发送给客户端的第一个HTML块表示“我们正在完成您的事务。”交易完成时间过去了。然后将第二个也是最后一个HTML发送给客户端,该客户端显示“好了,您的交易现已完成”。 (HTTP Dev's Handbook p97)将这个想法与创建新文件的201结合起来。可能是在服务器处理结束之前,新文件的位置是未知的。因此,它希望使用分块传输编码,并且它希望将Location标头放在预告片中。

第二次修改:是的,您可以添加它,因为the spec specifically forbids只有以下标题字段:Transfer-Encoding,Content-Length和Trailer。

相关问题