2012-08-11 13 views
5

Estoy utilizando Jetty 7.6 con el marco web de Scalatra. En algunas de las solicitudes, debo enviar un texto grande como cuerpo de respuesta al cliente, utilizo HttpServletResponse.getWriter() para escribir la respuesta.Jetty HTTP 413 Encabezado Error completo - Java/Scala

Me di cuenta de que en el lado del cliente recibo 413 Header Full error. Aparentemente, una solución a este problema en Jetty es aumentar el valor del tamaño del buffer del encabezado de embarcadero.

Me gustaría saber qué tiene que ver HttpServletResponse.getWriter() con el tamaño del encabezado de la solicitud? Como entiendo, HttpServletResponse.getWriter() escribe en el cuerpo de respuesta en lugar de en el encabezado de respuesta.

Agradezco que alguien pueda explicarme este problema.

Respuesta

3

HTTP response code 413 es HttpStatus. REQUEST_ENTITY_TOO_LARGE.

No tiene nada que ver con su HttpServletResponse.getWriter().

Capture y compruebe los encabezados de solicitud, está enviando una cantidad irrazonable de encabezados al servidor.

6

Lamentablemente, esto no es solo los encabezados que importan (como el tiempo de joakime). Jetty tiene un búfer para los encabezados y un búfer para la solicitud.

  • Si la solicitud completa (secuencia de datos http) encaja en el buffer del audífono no hay problema.
  • Si excede el búfer del encabezado, el búfer de solicitud será el usuario.
  • Si se supera el búfer de solicitud, entonces tiene una respuesta HTTP estándar con el estado 413.

No es lo mismo (buffer) para la respuesta, pero es de esperar HTTP está diseñado para enviar "fragmentada" respuesta.

Estoy enfrentando el mismo problema con una carga.

Lo que he encontrado es que puede establecer el tamaño de esos búferes. Ver: 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)

archivo jetty.xml que puede utilizar para hacerlo:

<?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

enlaces ya no funcionan – morpheus

2

Si está utilizando o actualizado en Jetty 9, que eliminó el SelectChannelConnector. Aquí está la jetty.xml actualizada -

<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> 

Ver http://www.eclipse.org/jetty/documentation/current/configuring-connectors.html

Cuestiones relacionadas