2014-02-07 97 views
3

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

这里是我的伪/码 -

@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()没有工作。

编辑:我正在寻找能够根据“某些条件”在个人响应级别更改最大标题大小。

+0

maxHttpHeaderSize属性传递有效载荷为响应体,而不是'定制Header.' – EJP

回答

0

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

参见here.

+0

我不能改变的全局设置。我正在寻找个人响应级别的解决方案。 –

1

该消息是约大小,而不是总缓冲器大小。从Tomcat Configuration Guide section on "The HTTP Connector"

maxHttpHeaderSize

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

+0

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

+1

严重的是,要么增加全局限制,要么为响应创建不超过8KB的标头。 –

0

你正在做

你所设置缓冲区writig repsonse体的大小。它与响应标题无关。一旦达到缓冲区大小,这主要用于清除响应。

你需要做的

什么,你需要设置Tomcat Configuration

+0

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