分块编码和内容长度标头

时间:2010-07-21 21:42:38

标签: http encoding transfer chunked

是否可以设置内容长度标头并使用分块传输编码?这样做是否解决了使用chunked时无法知道客户端响应长度的问题?

我正在考虑的情况是当你有一个大文件要传输时,确定它的大小没有问题,但它太大而无法完全缓冲。 (如果你没有使用chunked,那么整个响应必须先被缓冲?对吗?)

感谢。

3 个答案:

答案 0 :(得分:26)

1)否:“消息不得包含Content-Length头字段和非身份传输编码。如果消息包含非身份传输编码,则必须忽略Content-Length。” (RFC 2616, Section 4.4

2)不,你可以使用Content-Length和stream;该协议不会限制您的实施方式。

答案 1 :(得分:9)

好吧,你总是可以发一个标题来说明文件的大小。 类似response.addHeader("File-Size","size of the file");的东西 并忽略Content-Length标题。

必须调整客户端实现以读取此值,但是,你可以实现你想要的东西:)

答案 2 :(得分:0)

您必须使用Content-Length或chunking,但不能同时使用两者。

如果您事先知道长度,即使您动态生成内容并且从未在缓冲区中同时使用内容,也可以使用Content-Length而不是分块。

但是,如果数据非常大,则不应该这样做,因为代理可能无法处理它。对于大数据,分块更安全。