是否可以设置内容长度标头并使用分块传输编码?这样做是否解决了使用chunked时无法知道客户端响应长度的问题?
我正在考虑的情况是当你有一个大文件要传输时,确定它的大小没有问题,但它太大而无法完全缓冲。 (如果你没有使用chunked,那么整个响应必须先被缓冲?对吗?)
感谢。
答案 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而不是分块。
但是,如果数据非常大,则不应该这样做,因为代理可能无法处理它。对于大数据,分块更安全。