【发布时间】:2011-03-19 06:17:30
【问题描述】:
是否可以设置内容长度标头并使用分块传输编码?这样做是否解决了使用chunked时客户端不知道响应长度的问题?
我正在考虑的场景是当您有一个大文件要传输并且确定其大小没有问题,但它太大而无法完全缓冲。 (如果你不使用分块,那么整个响应必须先缓冲?对吗??)
谢谢。
【问题讨论】:
标签: http encoding transfer chunked
是否可以设置内容长度标头并使用分块传输编码?这样做是否解决了使用chunked时客户端不知道响应长度的问题?
我正在考虑的场景是当您有一个大文件要传输并且确定其大小没有问题,但它太大而无法完全缓冲。 (如果你不使用分块,那么整个响应必须先缓冲?对吗??)
谢谢。
【问题讨论】:
标签: http encoding transfer chunked
您必须使用 Content-Length 或分块,但不能同时使用。
如果您事先知道长度,您可以使用 Content-Length 而不是分块,即使您动态生成内容并且永远不会一次将所有内容都放在缓冲区中。
但是,如果数据非常大,则不应这样做,因为代理可能无法处理它。对于大数据,分块更安全。
【讨论】:
好吧,您总是可以发送一个标明文件大小的标头。
类似response.addHeader("File-Size","size of the file");
并忽略 Content-Length 标头。
必须调整客户端实现以读取此值,但是您可以同时实现您想要的东西:)
【讨论】:
X- 前缀。 HTTP 代理很可能会决定丢弃您的非标准非 X 标头。
X- 前缀不受欢迎、已弃用且不被视为最佳做法。只要继续使用file-size 作为标题名称,就可以了。 tools.ietf.org/html/rfc6648
1) 否:“消息不得同时包含 Content-Length 标头字段和非身份传输编码。如果消息确实包含非身份传输编码,则必须忽略 Content-Length。” (RFC 2616, Section 4.4)
2) 不,您可以使用 Content-Length 和流;该协议不会限制您的实现方式。
【讨论】: