我正在使用带有Scalatra Web框架的Jetty 7.6。在一些请求中,我需要将一个大文本作为响应主体发送给客户端,我使用HttpServletResponse.getWriter()来编写响应。
我注意到在客户端我收到了413 Header Full错误。显然,Jetty中这个问题的一个解决方案是增加jetty的头缓冲区大小值。
我想知道HttpServletResponse.getWriter()与请求标头的大小有什么关系?!据我所知,HttpServletResponse.getWriter()写入响应主体而不是响应头。
如果有人能解释这个问题我很感激。
答案 0 :(得分:6)
不幸的是,这不仅是重要的标题(如joakime thougth)。 Jetty有一个标头缓冲区和一个请求缓冲区。
答案有同样的事情(缓冲区),但希望Http能够发送“分块”响应。
上传时遇到同样的问题。
我发现你可以设置这些缓冲区的大小。 看到: http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/nio/SelectChannelConnector.html
您可以使用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