Servlets Jetty HTTP 413标头完整错误-Java/Scala
我正在使用Jetty 7.6和Scalatra web框架。在一些请求中,我需要向客户端发送一个大文本作为响应体,我使用HttpServletResponse.getWriter()来编写响应 我注意到在客户端,我收到了413头完全错误。显然,Jetty中这个问题的一个解决方案是增加Jetty的头缓冲区大小值 我想知道HttpServletResponse.getWriter()与请求头的大小有什么关系?!据我所知,HttpServletResponse.getWriter()写入响应体而不是响应头 如果有人能解释这个问题,我将不胜感激。是HttpStatus 它与您的HttpServletResponse.getWriter()无关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()写入响应体而不是响
捕获并检查请求头,您向服务器发送的头数量不合理。不幸的是,这不仅仅是重要的头(如joakime Thought)。 Jetty有一个头部缓冲区和一个请求缓冲区
- 如果完整请求(http数据流)适合听者的缓冲区,则没有问题
- 如果它超过了报头的缓冲区,则请求缓冲区将是用户
- 如果它超过了请求缓冲区,那么您将得到一个状态为413的标准Http响应
<?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