HTTP 1.1响应可以分块传输(规范)。在最后一个分块结束时,服务器可以发送包含其他标头的“拖车”。
问题是:您能够在拖车中包含
Location
标头,并且浏览器会通过重定向做出反应吗?Location
标头,并且浏览器会通过重定向做出反应吗?是的。
要有Location头,服务器应该响应201或3XX状态码之一。它还应该包含内容,可能是HTML中解释发生了什么并提供一个方便的超链接到资源的消息。内容需要被分块,Transfer-Encoding头应该存在并具有值“chunked”。
如果所有这些都是真实的,那么Trailer头可以添加一个值为“Location”,然后Location头可以跟随内容。
这是真正的问题:这似乎很愚蠢和无意义。你可能会有什么用例,其中你将客户端重定向到新位置,但直到内容完成后你才知道该位置?我想不出一个理由。但也许你有一个?如果没有一个好的用例,那么我认为你不应该这样做。
编辑:我想到了一个原因。Shiflett举了一个分块传输编码的例子,其中发送给客户端的第一块HTML说:“我们正在完成您的交易。”在完成交易时经过了一段时间。然后向客户端发送第二个和最后一个HTML块,其中说:“好的,您的交易现在已经完成。”(HTTP Dev's Handbook p97)将这个想法与创建新文件的201结合起来。可能直到服务器处理的最后才知道新文件的位置。因此,它希望使用分块传输编码,并希望将Location头放在trailers中。
第二次编辑:是的,您可以添加它,因为规范明确禁止以下标头字段:Transfer-Encoding、Content-Length和Trailer。