如何通过配置设置Tomcat响应缓冲区大小?

4

我希望能够通过配置(据我所知是 server.xml)来更改默认的响应缓冲区大小。文档说明可以在“连接器”元素内使用“bufferSize”属性实现此目的,但是这种方法并不起作用。我还尝试了更改“socket.appWriteBufSize”和“socket.appReadBufSize”,但没有成功。

<Connector port="8080" protocol="HTTP/1.1" 
            connectionTimeout="20000"
    bufferSize="64000" 
    maxHttpHeaderSize="64000"
    socket.appWriteBufSize="64000"
    socket.appReadBufSize="64000"
    redirectPort="8443" />

请注意,如果我从我的Java代码中更改响应大小(httpResponse.setBufferSize(64000)),它会正常工作,但出于某种充分的原因,我希望使用标准的Tomcat配置机制。
所有测试都是使用最新下载的Tomcat进行的。

哪个Tomcat版本? - user207421
那你怎么知道它不起作用了? - user207421
"哪个Tomcat版本?" 从日期可以看出,这发生在2011年。对我来说,今天回忆起7年前的Tomcat版本很困难,但正如您从我的答案中所看到的,缓冲区大小被刻录到代码中,没有通过配置设置的方法。 - Bruno Bossola
“你怎么知道它不起作用?”嗯,正如你可能知道的那样,由于服务器无法在缓冲区中计算出长度,因此您将获得块响应。 - Bruno Bossola
4个回答

4

看起来没有办法解决这个问题。我查看了代码,但是缓冲区似乎是使用默认大小构建的。

因此,唯一解决这个问题的方法就是从你的代码中使用Response::setBufferSize()。


1
我不知道为什么这个被踩了。我自己回答了,给出了不能在那时实现的原因,并提供了解决方案。下次,请评论以便我能改进答案(如果需要的话)。 - Bruno Bossola

1

在连接器中尝试以下设置:socketBuffer="64000"


4
虽然这段代码可以回答问题,但提供关于它如何以及/或为什么解决问题的附加上下文会提高答案的长期价值。 - mech

0

这是解决方案,在application.properties中设置:

server.tomcat.max-http-response-header-size=16KB #或您的值


你的回答可以通过提供额外的支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好的回答的更多信息。 - Community

-1
要使用“socket.appWriteBufSize”和“socket.appReadBufSize”属性,您的连接器必须是NIO连接器。将“protocol”属性的值从“HTTP/1.1”更改为“org.apache.coyote.http11.Http11NioProtocol”。

这两个属性都不是响应缓冲区大小。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接