如果我不指定contentLenght头,当我发送包含一个zip文件中的HttpResponse发生什么事。
我做了一些测试,它似乎是头默认情况下使用正确的文件lenght设置。 我可以肯定,这总是会发生的。 当我发现可以对一些文件?
这是代码的最重要的部分:
response.setContentType("application/zip");
response.addHeader("Content-disposition", "attachment; filename=" + zipFileName);
zos.close();
out.close();
response.flushBuffer();
达维德
如果实际响应内容长度在响应缓冲区,它通常是2KB完全装配(这取决于服务器化妆/版本/配置),则内容长度报头将被设置。 然而,如果实际的响应内容长度比响应缓冲大,因此,它会被冲洗比的响应内容的端越早到达,则servlet将发送与响应分块编码 ,并忽略任何尝试设置内容长度头。
这是除其他提到的的Javadoc HttpServlet#doGet()
将在下文中引用:
...
如果可能,设置Content-Length头(与ServletResponse.setContentLength(int)
法),以允许servlet容器使用的持久连接到它的响应返回给客户端,从而提高性能。 如果整个响应响应缓冲区内适合的内容长度被自动设置。
当使用HTTP 1.1分块编码(这意味着该响应具有Transfer-Encoding头),不设置Content-Length头。
...
与“正常”编码时,数据被发送作为一个连续的块。
actualContent
随着分块编码,数据以块看起来像这样发
part1LengthInHexadecimal
actualPart1Content
part2LengthInHexadecimal
actualPart2Content
part3LengthInHexadecimal
actualPart3Content
0
以十六进制的部分长度指示客户端数据的下一个块有多大(以便它不会“意外”解析下一个块作为当前组块的一部分)。 最后,客户端胶合部分组合在一起。
另见例如维基百科 。