Límite de tamaño de campo de solicitud HTTP (POST) & amp; Request.BinaryRead en JSPs

StackOverflow https://stackoverflow.com/questions/1826524

  •  22-07-2019
  •  | 
  •  

Pregunta

Primero, mi Java está más que oxidado y nunca he hecho JSP o servlets, pero estoy tratando de ayudar a otra persona a resolver un problema.

Un formulario procesado por JavaScript se publica de nuevo en un JSP. Algunos de los campos de este formulario tienen un tamaño superior a 100 KB. Sin embargo, cuando el campo de formulario se recupera en el lado JSP, el valor del campo se trunca a 100 KB.

Ahora sé que hay un problema similar en ASP Request.Form que se puede solucionar usando Request.BinaryRead. ¿Hay un equivalente en Java?

¿O, alternativamente, hay una configuración en Websphere / Apache / IBM HTTP Server que soluciona el mismo problema?

¿Fue útil?

Solución 2

Hemos resuelto el problema. Nada tuvo que ver con la configuración del servidor web y resultó que no se estaba truncando en la publicación.

El campo del formulario antes de la publicación se estaba dividiendo en fragmentos de 102399 bytes de tamaño por JavaScript y cada fragmento se agregaba al campo del formulario como un valor, por lo que terminaba con una matriz de valores. Request.Form () parece concatenar automáticamente estos valores para reproducir la única cadena gigante, pero Java getParameter () no lo hace. Sin embargo, usar getParameterValues ??() y reconstruir la cadena a partir de los valores devueltos fue el truco.

Otros consejos

Dado que la solicitud publicada debe mantenerse en memoria por el contenedor de servlet para proporcionar la funcionalidad requerida por la API ServletRequest, la mayoría de los contenedores de servlet tienen un límite de tamaño configurable para evitar ataques DoS, ya que de lo contrario una pequeña cantidad de clientes falsos podría provocar el servidor se queda sin memoria.

Es un poco extraño si WebSphere está truncando silenciosamente la solicitud en lugar de fallar correctamente, pero si esta es la causa de su problema, puede encontrar las opciones de configuración aquí en la documentación de WebSphere .

Puede usar getInputStream (bytes sin formato) o getReader (datos de caracteres decodificados) para leer datos de la solicitud. Nota cómo esto interactúa con la lectura de los parámetros. Si no desea utilizar un servlet, eche un vistazo a Filtrar para wrap la solicitud.

Esperaría que WebSphere rechazara la solicitud en lugar de truncar datos arbitrariamente. Sospecho que hay un error en otro lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top