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

Servlets Jetty HTTP 413标头完整错误-Java/Scala,servlets,jetty,scalatra,Servlets,Jetty,Scalatra,我正在使用Jetty 7.6和Scalatra web框架。在一些请求中,我需要向客户端发送一个大文本作为响应体,我使用HttpServletResponse.getWriter()来编写响应 我注意到在客户端,我收到了413头完全错误。显然,Jetty中这个问题的一个解决方案是增加Jetty的头缓冲区大小值 我想知道HttpServletResponse.getWriter()与请求头的大小有什么关系?!据我所知,HttpServletResponse.getWriter()写入响应体而不是响

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

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

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

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

是HttpStatus

它与您的HttpServletResponse.getWriter()无关


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

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

  • 如果完整请求(http数据流)适合听者的缓冲区,则没有问题
  • 如果它超过了报头的缓冲区,则请求缓冲区将是用户
  • 如果它超过了请求缓冲区,那么您将得到一个状态为413的标准Http响应
答案也是一样的(缓冲区),但希望Http被设计成发送“分块”响应

我在上传时也面临同样的问题

我发现可以设置这些缓冲区的大小。 见:

)

您可以使用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>

8192

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

8192