¿Hay un límite de longitud práctica encabezado HTTP?
-
11-09-2019 - |
Pregunta
Tengo una aplicación web que añade información contextual a los objetos XmlHttpRequest utilizando el setRequestHeader API. Estoy usando un nombre personalizado cabecera (por ejemplo X-Fu) y un valor estructurado JSON . No es parte de la cadena de consulta URL o el cuerpo de POST, ya que es la meta información acerca de la solicitud.
¿Hay un límite de tamaño práctico para el valor de la cabecera? Si mi JSON se trunca, se convierte en unparseable. Estoy muy preocupada por los límites en Apache 2, Tomcat 6 y IIS 7. Hice una búsqueda en Google de http límite de longitud de la cabecera , pero muchos de los resultados parecen anticuados. Hay algunas observaciones pertinentes en ¿Qué tan grande puede obtener una cadena de agente de usuario / a> pero no es tan específica como me gustaría.
Editar Yo sólo encontré con esta pregunta similar - de valores de encabezado HTTP
Solución
Sí, pero los límites son configurables y depende de la plataforma. Por ejemplo, Tomcat tiene un límite predeterminado de 8K. Creo que IIS 6, no está seguro acerca de IIS 7, tiene un límite de 16K. Me encontré con esto cuando se utiliza la autenticación integrada de Windows para varios sitios web. Resulta que mi token de seguridad era demasiado grande cuando se codifica en la cabecera. Afortunadamente, estos son configurables. Configuración del registro para IIS se pueden encontrar en http://support.microsoft.com/kb/820129 . Creo que los ajustes son clave para el cambio MaxFieldLength (según el tamaño de la cabecera) y MaxRequestBytes (tamaño total del pedido).
Otros consejos
A pesar de que cada uno de software de servidor web tiene algunas limitaciones, hay una diferencia si hay un límite para la plus de cabecera campos de petición HTTP de línea o para cada campo de cabecera.
Aquí está un resumen:
Para concluir: Para ser aceptado por todos los servidores web anteriormente, un la línea de pedido más campos del encabezado de solicitud no debe superar los 8190 Bytes . Este es también el límite para cada uno campos de cabecera (efectivamente incluso menos).
Para Apache, he encontrado este Apache Seguridad artículo que enumera estas directivas:
# allow up to 100 headers in a request
LimitRequestFields 100
# each header may be up to 8190 bytes long
LimitRequestFieldsize 8190
Para Nginx, el large_client_header_buffers Directiva de HttpCoreModule controla esto:
La línea de cabecera más larga de la solicitud también debe ser no más que el tamaño de una memoria intermedia, de lo contrario el cliente obtener el error "solicitud incorrecta" (400).
Por defecto, el tamaño de una memoria intermedia es igual al tamaño de la página, dependiendo de la plataforma, ya sea este o 4K 8K
Si bien se puede configurar el servidor, es poco probable que realmente se puede configurar todo el camino a través de firewalls, balanceadores de carga y servidores proxy. Mantener el tamaño de la cabecera pequeña evita que los problemas de distancia.
El Flash Media Server 4.5 tiene un límite de longitud de la cabecera por defecto muy corto que puede hacer que el servidor simplemente no responde, sobre todo en circunstancias en las que hay una carga de galletas moderado.
En el archivo de Flash Media Server Adaptor.xml, la
MaxHeaderLineLength
elemento determina el tamaño de la cabecera HTTP del servidor puede manejar. El valor por defecto paraMaxHeaderLineLength
es de 1024 bytes. algunos navegadores enviar una cabecera de mayor de 1024 bytes. En este escenario, Apache envía respaldar una respuesta vacía. Para solucionar este problema, configureMaxHeaderLineLength
a 8.192.Nota:. De manera predeterminada, el límite de tamaño de la cabecera HTTP Apache es de 8 KB (8190 bytes más un retorno de carro)
Su puesta aquí en caso de que el límite de tamaño de la cabecera en Flash Media Server muerde a otra persona.