当使用setContentLength方法设置具有高于实际尺寸的较高尺寸的响应长度时,为什么容器不是自动计算长度?

例如,

String s = "hello";
byte[] b = s.getBytes();

response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();
.

当我击中servlet时,加载页面需要大约半分钟,这是因为内容长度标题..?

这种方法有什么需要?为什么不能通过容器来计算响应的长度?

有帮助吗?

解决方案

如果要返回大的内容,则加载TE完全响应并立即发送它,而是加载并将其发送在块中,这通常是不实际的。由于长度作为响应开头的一部分发送,因此容器无法稍后更改它。

在这种情况下,您可以告诉容器,您的响应是100个字节,您发送前5个字节(触发标题“内容长度:100”也可以发送),所以现在收件人将期望另外95个字节。

现在,另一方面,假设您的内容是10GB,您不想首先将所有的内存加载到内存中,以便容器计算大小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top