【发布时间】:2013-12-11 19:22:37
【问题描述】:
我正在使用 Jetty 服务器,并且有一个 servlet 可以产生超过 65536 字节大小的大响应。我尝试使用 curl、wget 和 python urllib2 来请求 servlet 的 url 处的内容,但所有响应体的截断大小仅为 65536 字节,这让我相信限制在服务器上。有趣的是,如果我在桌面而不是生产服务器上运行服务器,对于同一个 servlet 的响应大小似乎没有 65536 的上限。有人可以解释为什么会发生这种情况以及我如何解决它并发送更大的回复吗?
【问题讨论】:
-
您有
content-length标头吗?它指定的数字是否比 65536 大得多? -
没有内在限制。这是一个(旧的!)错误报告:jira.codehaus.org/browse/JETTY-200 - “在 6.0.1 中出现一个完整缓冲区未触发刷新的问题。”问:你碰巧在使用 Jetty 6.0.1 吗?问:您究竟是如何发送数据的?你能给我们看看代码吗?
-
在生产中,是否有像 Apache 这样的代理服务器在 Jetty 前面可能被配置为截断响应?
-
发现问题。读取和写入请求输入流和响应输出流的空闲超时非常低。因此,大于 1 个块(在本例中为 65536 字节)的响应在写入第二个块之前阻塞写入调用的时间超过了这个低超时时间。这就是为什么本地机器上没有出现问题的原因——因为请求是本地的,它没有达到超时。在我们的例子中,解决方案不是为涉及需要发送大量数据的 servlet 的请求和响应设置如此低的超时时间。