如何从jetty服务器中的Javaservlet发送大型(超过64k)http响应?
我使用的是Jetty服务器,有一个servlet,它可以生成大大超过65536字节的响应。我尝试了curl、wget和pythonURLLIB2在servlet的url处请求内容,但都有一个仅为65536字节的截断响应体大小,这让我相信限制在服务器上。有趣的是,如果我在桌面上运行服务器,而不是在生产服务器上运行,那么对于同一个servlet,响应大小似乎没有65536的上限。有人能解释为什么会发生这种情况,以及我如何解决它并发送更大的响应吗
# 1 楼答案
自我回答,使问题有答案。从评论中:
发现了问题。我们对请求输入流和响应输出流的读写有一个非常低的空闲超时。因此,大于1个数据块(本例中为65536字节)的响应在写入第二个数据块之前,在写入调用上阻塞的时间比这个低超时时间长。这就是为什么问题没有发生在本地机器上,因为请求是本地的,它没有达到超时。在我们的例子中,解决方案不是为涉及需要发送大量数据的servlet的请求和响应设置如此低的超时
# 2 楼答案
Jetty的响应大小没有限制
它实际上可以流式传输单个HTTP分块编码的响应,直到宇宙热死
jetty发行版附带了一个演示库(或jetty旧版本的“test webapp”),其中有几个数兆字节的示例供您测试
为您的servlet发布一些代码,这可能会揭示发生了什么