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

Ali*_*ehi 5 servlets jetty scalatra

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

我注意到在客户端我收到413 Header Full错误.显然,Jetty中解决这个问题的一个方法是增加jetty的header-buffer-size值.

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

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

Syl*_*ain 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>
Run Code Online (Sandbox Code Playgroud)