2012-08-11 128 views
5

我正在使用Jetty 7.6和Scalatra Web框架。在一些请求中,我需要发送一个大的文本作为响应主体到客户端,我使用HttpServletResponse.getWriter()来写入响应。Jetty HTTP 413头完整错误 - Java/Scala

我注意到,在客户端我收到413标题完全错误。显然Jetty中的这个问题的一个解决方案是增加jetty的头缓冲区大小值。

我想知道HttpServletResponse.getWriter()与请求头的大小有什么关系?据我所知HttpServletResponse.getWriter()写入响应正文,而不是响应头。

我很感激,如果有人能解释这个问题。

回答

6

不幸的是,这不仅是重要的标题(如joakime thougth)。 Jetty有一个头缓冲区和一个请求缓冲区。

  • 如果完整的请求(http数据流)适合于听众的缓冲区没有问题。
  • 如果它超出头的缓冲区,请求缓冲区将是用户。
  • 如果超过请求缓冲区,然后你得到了与状态413

没有为答案同样的事情(缓存),但希望HTTP设计的发送标准的HTTP响应“分块”响应。

我在上传时遇到同样的问题。

我发现的是,您可以设置这些缓冲区的大小。 见: http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/nio/SelectChannelConnector.html

http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/nio/AbstractNIOConnector.html

http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/AbstractConnector.html#setRequestHeaderSize(int

可以使用的jetty.xml文件来做到这一点:

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"  "http://jetty.mortbay.org/configure.dtd"> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 
<Call name="addConnector"> 
    <Arg> 
    <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> 
    <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set> 
    <Set name="requestHeaderSize">8192</Set> 
    </New> 
    </Arg> 
</Call> 
</Configure> 
+1

链接不再工作 – morpheus 2016-08-31 17:31:43

2

如果您使用或升级到码头9,他们已经删除了SelectChannelConnector。这里是更新的jetty.xml -

<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration"> 
    <Set name="requestHeaderSize">8192</Set>  
</New> 

<Call name="addConnector"> 
    <Arg> 
    <New class="org.eclipse.jetty.server.ServerConnector"> 
     <Arg name="server"><Ref id="Server" /></Arg> 
     <Arg name="factories"> 
     <Array type="org.eclipse.jetty.server.ConnectionFactory"> 
      <Item> 
      <New class="org.eclipse.jetty.server.HttpConnectionFactory"> 
       <Arg name="config"><Ref id="httpConfig" /></Arg> 
      </New> 
      </Item> 
     </Array> 
     </Arg> 
     <Set name="port">8080</Set> 
    </New> 
    </Arg> 
</Call> 

http://www.eclipse.org/jetty/documentation/current/configuring-connectors.html