【问题标题】:ServletResponse.setBufferSize doesn't work in Tomcat 7?ServletResponse.setBufferSize 在 Tomcat 7 中不起作用?
【发布时间】:2014-03-05 12:32:27
【问题描述】:

我正在使用 ServletResponse.setBufferSize 增加响应的缓冲区大小,但 Tomcat 7 仍然抛出缓冲区大小不够大的异常。这是 Tomcat 7.0.32 中的错误吗?

这是我的伪代码-

@Override
protected void writeInternal(Object o, HttpOutputMessage outputMessage)
    throws IOException, HttpMessageNotWritableException {

    if (some condition)
    {
        ((ServletServerHttpResponse)outputMessage).getServletResponse().setBufferSize(Integer.MAX_VALUE);
        outputMessage.getHeaders().set("Custom-Header", gson.toJson(big payload));
    }

    // ...

这是个例外 -

org.apache.coyote.http11.HeadersTooLargeException:试图向响应头写入比缓冲区可用空间更多的数据。增加连接器上的 maxHttpHeaderSize 或向响应标头写入更少的数据。

我需要重置缓冲区吗? reset() 无效。

编辑:我正在寻找基于“某些条件”在单个响应级别更改最大标头大小的能力。

【问题讨论】:

  • 将payload作为响应体传递,而不是Custom-Header.

标签: java tomcat servlets tomcat7


【解决方案1】:

你在做什么

您正在设置 writig 响应正文的缓冲区大小。它与响应标头无关。这主要用于在达到缓冲区大小后刷新响应。

你需要做什么

你需要在Tomcat Configuration中设置maxHttpHeaderSize属性

【讨论】:

  • 我无法更改全局设置。我正在寻找个人响应级别的解决方案。
【解决方案2】:

消息是关于 header 大小的,而不是总缓冲区大小。来自Tomcat Configuration Guide section on "The HTTP Connector"

最大HttpHeaderSize

请求和响应 HTTP 标头的最大大小,以字节为单位。如果未指定,则此属性设置为 8192 (8 KB)。

【讨论】:

  • 我无法更改全局设置。我正在寻找个人响应级别的解决方案。
  • 说真的,要么增加全局限制,要么不要为响应创建超过 8KB 的标头。
【解决方案3】:

你需要在server.xml中修改HTTP连接器的maxHttpHeaderSize,而不是代码。

here.

【讨论】:

  • 我无法更改全局设置。我正在寻找个人响应级别的解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 2014-01-31
  • 2016-12-11
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多