是否可以设置内容长度标头并使用分块传输编码?这样做是否解决了使用分块时不知道客户端响应长度的问题?
我正在考虑的场景是当您有一个大文件要传输并且确定其大小没有问题,但它太大而无法完全缓冲。(如果你不使用分块,那么整个响应必须首先被缓冲?对吗??)
谢谢。
“消息不得同时包含 Content-Length 标头字段和非身份传输编码。如果消息确实包含非身份传输编码,则必须忽略 Content-Length。” (RFC 2616,第 4.4 节)
好吧,您总是可以发送一个标明文件大小的标题。类似于response.addHeader("File-Size","size of the file");
And 忽略 Content-Length 标头。
必须调整客户端实现以读取此值,但是您可以实现您想要的两件事:)
您必须使用 Content-Length 或分块,但不能同时使用两者。
如果您事先知道长度,则可以使用 Content-Length 而不是分块,即使您动态生成内容并且永远不会一次将所有内容都放在缓冲区中。
但是,如果数据非常大,则不应这样做,因为代理可能无法处理它。对于大数据,分块更安全。
此标头可能是 Postman Parse 错误的原因:
“Content-Length”和“Transfer-Encoding”不能一起出现在响应标头中。
ResponseEntity<?>
在控制器中使用除 raw 之外的参数化ResponseEntity
可以解决此问题。