Jetty HTTP 413标头完整错误 - Java / Scala

时间:2012-08-11 12:05:42

标签: servlets jetty scalatra

我正在使用带有Scalatra Web框架的Jetty 7.6。在一些请求中,我需要将一个大文本作为响应主体发送给客户端,我使用HttpServletResponse.getWriter()来编写响应。

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

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

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

3 个答案:

答案 0 :(得分: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 :(得分:3)

HTTP response code 413是HttpStatus。REQUEST_ENTITY_TOO_LARGE

它与您的HttpServletResponse.getWriter()无关。

捕获并检查请求标头,您向服务器发送了不合理数量的标头。

答案 2 :(得分:2)

如果您正在使用或升级到Jetty 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