Respuestas:
No, HTTP no define ningún límite. Sin embargo, la mayoría de los servidores web limitan el tamaño de los encabezados que aceptan. Por ejemplo, en Apache, el límite predeterminado es de 8 KB, en IIS es de 16 KB . El servidor devolverá un 413 Entity Too Large
error si el tamaño de los encabezados excede ese límite.
Pregunta relacionada: ¿Qué tan grande puede ser una cadena de agente de usuario?
Como dice vartec anteriormente, la especificación HTTP no define un límite, sin embargo, muchos servidores lo hacen de manera predeterminada. Esto significa, prácticamente hablando, el límite inferior es 8K . Para la mayoría de los servidores, este límite se aplica a la suma de la línea de solicitud y TODOS los campos de encabezado (así que mantenga sus cookies cortas).
Vale la pena señalar que nginx usa el tamaño de página del sistema de forma predeterminada, que es 4K en la mayoría de los sistemas. Puede verificar con este pequeño programa:
pagesize.c:
#include <unistd.h>
#include <stdio.h>
int main() {
int pageSize = getpagesize();
printf("Page size on your system = %i bytes\n", pageSize);
return 0;
}
Compilar con gcc -o pagesize pagesize.c
luego ejecutar ./pagesize
. Mi servidor ubuntu de Linode me informa debidamente que la respuesta es 4k.
LimitRequestLine
y se LimitRequestFieldSize
aplica a cada línea de encabezado HTTP de forma individual ... no la "suma de ..."
HTTP no establece un límite predefinido en la longitud de cada campo de encabezado o en la longitud de la sección de encabezado como un todo, como se describe en la Sección 2.5. En la práctica se encuentran varias limitaciones ad hoc en la longitud del campo de encabezado individual, a menudo dependiendo de la semántica de campo específica.
Los valores del encabezado HTTP están restringidos por las implementaciones del servidor. La especificación HTTP no restringe el tamaño del encabezado.
Un servidor que recibe un campo de encabezado de solicitud, o un conjunto de campos, más grande de lo que desea procesar DEBE responder con un código de estado 4xx (Error del cliente) apropiado. Ignorar tales campos de encabezado aumentaría la vulnerabilidad del servidor para solicitar ataques de contrabando (Sección 9.5).
La mayoría de los servidores devolverán el 413 Entity Too Large
error 4xx correspondiente cuando esto ocurra.
Un cliente PUEDE descartar o truncar los campos de encabezado recibidos que sean más grandes de lo que el cliente desea procesar si la semántica del campo es tal que los valores descartados pueden ignorarse de manera segura sin cambiar el marco del mensaje o la semántica de respuesta.
El tamaño de encabezado HTTP sin límite mantiene al servidor expuesto a ataques y puede reducir su capacidad para servir tráfico orgánico.
También descubrí que en algunos casos la razón de 502/400 en el caso de muchos encabezados podría deberse a una gran cantidad de encabezados sin importar el tamaño. de los documentos
tune.http.maxhdr Establece el número máximo de encabezados en una solicitud. Cuando una solicitud viene con un número de encabezados mayor que este valor (incluida la primera línea), se rechaza con un código de estado "400 Solicitud incorrecta". Del mismo modo, las respuestas demasiado grandes se bloquean con "502 Bad Gateway". El valor predeterminado es 101, que es suficiente para todos los usos, teniendo en cuenta que el servidor Apache ampliamente implementado utiliza el mismo límite. Puede ser útil ampliar aún más este límite para permitir temporalmente que una aplicación con errores funcione para cuando se solucione. Tenga en cuenta que cada nuevo encabezado consume 32 bits de memoria para cada sesión, por lo tanto, no empuje este límite demasiado alto.
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr