El tamaño de un campo de encabezado de solicitud excede el límite del servidor debido a muchos valores If-None-Match

8

Aquí hay un caso interesante de un cliente que recibe el error "400 Bad Request" y aparentemente no puede ver una página de inicio de drupal alojada en Ubuntu 12.04.3 LTS usando Apache / 2.2.22:

Solicitud incorrecta
Su navegador envió una solicitud que este servidor no pudo entender.
El tamaño de un campo de encabezado de solicitud excede el límite del servidor.

Salida de rastreo de paquetes:

...
T 2013/09/02 15:23:10.458167 ###.###.###.###:40027 -> ###.###.###.###:80 [A]
GET / HTTP/1.0.
If-None-Match: "1363160742-0", "1363165573-1", "1363175854-1", "1363175854-0", "1363179616-0", "1363181811-0", "1363239319-1", "1363255903-0", "1363259282-0", "1363263398-1", "1363274564-0", "1363329642-0", "1363332613-1", "1363333851-0", "1363599826-0", "1363678909-0", "1363684227-1", "1363699732-0", "1363755181-0", "1363765691-1", "1363767178-0", "1363780208-0", "1363787589-0", "1363795259-1", "1363852409-1", "1363863225-1", "1363928115-0", "1363951793-0", "1363951793-1", "1364133610-1", "1364187608-1", "1364187608-0", "1364203083-0", "1364208174-0", "1364214930-0", "1364219815-0", "1364274441-1", "1364280930-0", "1364280930-1", "1364286055-1", "1364298840-0", "1364298840-1", "1364360674-0", "1364364356-1", "1364381508-0", "1364385520-1", "1364460734-0", "1364882595-1", "1364903271-0", "1364967946-0", "1364967946-1", "1364981713-0", "1364985142-1", "1364992835-1", "1365061578-0", "1365065290-1", "1365076128-0", "1365141088-1", "1365167701-0", "1365171024-0", "1365402404-1", "1365402404-0", "1365411731-1", "1365416882-0", "1365476715-0", "1365487578-0", "1365488880-1", "1365503922-1", "1365514224-1", "1365579101-0", "1365580320-0", "1365582817-0", "1365584926-0", "1365589524-0", "1365608307-0", "1365649987-0", "1365682295-0", "1365685083-0", "1365770532-1", "1365770532-0", "1365844566-0", "1365996619-1", "1366093719-1", "1366093719-0", "1366115408-0", "1366180275-1", "1366186431-0", "1366196476-0", "13662669
...

En esta etapa, no estoy 100% seguro de si solo se limita a un cliente específico, pero el error fue informado por un usuario con la siguiente cadena de agente de usuario:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.7

Ahora la pregunta sigue siendo qué hacer, ¿es un problema del servidor o simplemente un cliente que se porta mal?

inetpro
fuente
Esta no es una pregunta de Ubuntu. Eche un vistazo a los registros de Apache y úselos para obtener ayuda entre la comunidad especializada.
Luís de Sousa
Pensé que podría ser un problema predeterminado de Ubuntu.
inetpro
1
Estamos hablando de un servidor web que se ejecuta en Ubuntu, por lo que no está fuera del tema en sí. Como sugirió @ LuísdeSousa, mire /var/log/apache2/error.log, para encontrar qué límite se violó.
guntbert
@ LuísdeSousa Aquí admitimos todas las partes del servidor Ubuntu. ¿Por qué no sería una pregunta de Ubuntu?
Eliah Kagan
@guntbert lo interesante es que ni la solicitud ni el error real se registran nunca en los registros de apache. Está registrado en el proxy inverso de calamar y supongo que el proxy es realmente la causa
inetpro

Respuestas:

11

Has encontrado el problema. Algunos agentes de usuario y algunas solicitudes simplemente se vuelven demasiado grandes para los valores predeterminados del servidor web. Parece un problema tonto con el que tropezar, pero me sigue sucediendo nginx. Por lo general, cuando hay tontos nombres de cookies y cargas que se realizan ... De todos modos ...

La solución es simplemente superar el límite de solicitud. Puede hacer esto globalmente o solo para su sitio con la LimitRequestFieldSizedirectiva :

LimitRequestFieldSize 32768

Eso es un límite de 32 KB (por encima del valor predeterminado de 8 KB).

Oli
fuente
Eso es lo que estaba pensando, pero no estaba seguro del tamaño recomendado. ¡Gracias!
inetpro
1
Aumentar LimitRequestFieldSizea 32768no ayudó.
inetpro
@inetpro ¿Reiniciaste Apache? ¿Y está en un contexto lo suficientemente alto? Esto no funcionará en un archivo .htaccess.
Oli
1
¿Puso la entrada en el host virtual basado en el primer nombre definido, o en otro? La documentación dice: "Cuando se utiliza el alojamiento virtual basado en nombre, el valor de esta directiva se toma del host virtual predeterminado (primer listado) para NameVirtualHost a la que se asignó la conexión". Parece que es mejor hacer esto en la configuración global. El problema con hacerlo en un host virtual es que el encabezado de la solicitud contiene el nombre del host virtual requerido.
Robie Basak
2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸ ??? ⓹ℙℛṎℱỈ Ꭲ☕