2009-07-08 15 views
66

Tengo una aplicación web que agrega información contextual a los objetos XmlHttpRequest usando la API setRequestHeader. Estoy usando un nombre de encabezado personalizado (por ejemplo, X-Foo) y un valor estructurado JSON. No forma parte del cuerpo de QueryString de URL o POST porque es una metainformación sobre la solicitud.¿Existe un límite de longitud de encabezado HTTP práctico?

¿Existe un límite de tamaño práctico para el valor del encabezado? Si mi JSON se trunca, se vuelve inutilizable. Estoy más preocupado con los límites en Apache 2, Tomcat 6 e IIS 7. Hice una búsqueda en Google para límite de longitud del encabezado http, pero muchos de los resultados parecen anticuados. Hay algunos comentarios relevantes en How big can a user agent string get? pero no tan específicos como me gustaría.

Editar: Acabo de funcionar a través de esta pregunta similar - Maximum on http header values?

+0

Un enfoque interesante.¿Qué metadatos estás enviando así? –

+0

También tenga en cuenta que esto puede causar problemas si un usuario se conecta a través de un servidor proxy – carpii

Respuesta

45

Sí, pero los límites son configurable y depende de la plataforma. Por ejemplo, Tomcat tiene un límite predeterminado de 8K. Creo que IIS 6, que no está seguro acerca de IIS 7, tiene un límite de 16K. Me encontré con esto cuando uso la autenticación de Windows integrada para varios sitios web. Resulta que mi token de seguridad era demasiado grande cuando estaba codificado en el encabezado. Afortunadamente, estos son configurables. La configuración del registro para IIS se puede encontrar en http://support.microsoft.com/kb/820129. Creo que las configuraciones clave para cambiar son MaxFieldLength (por tamaño de encabezado) y MaxRequestBytes (tamaño total de la solicitud).

+1

Encontré este enlace en MSDN para establecer los límites de encabezado de IIS para un encabezado específico - http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits/headerLimits –

+0

De acuerdo con el artículo de KB, esos campos de registro funcionan para IIS6 e IIS7 – Cheeso

+1

Si bien puede configurar el servidor, es poco probable que pueda configurar todo el camino a través de firewalls, equilibradores de carga y proxies. Mantener el tamaño del encabezado pequeño evita problemas. – Lothar

14

Para Apache, me encontré con este artículo Server Limits for Apache Security 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, la large_client_header_buffers directiva de los controles HttpCoreModule esto:

La línea de cabecera más larga de la solicitud también debe haber no más que el tamaño de un búfer, de lo contrario el cliente obtiene 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 esto tampoco 4K o 8K

52

Aunque cada software de servidor web tiene algunas limitaciones, hay una diferencia si hay una límite para los campos de encabezado HTTP request line plus o para cada campo de encabezado.

He aquí un resumen:

  • Apache 1.3, 2.0, 2.2, 2.3: 8190 Bytes (para cada campo de cabecera)
  • IIS:
    • 4.0: 2097152 Bytes (para los campos de línea de solicitud más el encabezado)
    • 5.0: 131072 Bytes, 16384 Bytes con Windows 2000 Service Pack 4 (para la línea de petición, más campos de cabecera)
    • 6.0: 16384 Bytes (para cada una campos de cabecera)
  • Tomcat:
    • 5.5.x/6.0.x: 49152 Bytes (para los campos de línea de petición más cabecera)
    • 7.0.x: 8190 Bytes (para la línea de petición, más campos de cabecera)

Para concluir: Para ser aceptado por todos los servidores web anteriores, la línea de pedido más campos del encabezado de una solicitud no debería exceda 8190 Bytes. Este es también el límite para cada campo de encabezado (efectivamente incluso menos).

3

Flash Media Server 4.5 tiene un límite de longitud de encabezado predeterminado muy corto que puede hacer que el servidor simplemente no responda, especialmente en circunstancias donde hay una carga moderada de cookies.

Ver: Flash Media Server 4.5 Configuration and Administration: Configuring the server Configuring Apache HTTP Server: Specify the maximum HTTP header line length

En el archivo de Flash Media Server Adaptor.xml, el elemento MaxHeaderLineLength determina el tamaño de la cabecera HTTP del servidor puede manejar. El valor predeterminado para MaxHeaderLineLength es 1024 bytes. Algunos navegadores envían un encabezado de más de 1024 bytes. En este escenario, Apache envía una respuesta vacía. Para solucionar este problema, configure MaxHeaderLineLength a 8192.

Nota: Por defecto, el límite de tamaño de la cabecera HTTP Apache es de 8 KB (8190 bytes más un retorno de carro).

Poniendo esto aquí en caso de que el límite de tamaño de encabezado en Flash Media Server muerda a alguien más.

4

Si bien puede configurar el servidor, es poco probable que pueda configurar todo el camino a través de cortafuegos, equilibradores de carga y proxies. Mantener el tamaño del encabezado pequeño evita problemas.

Cuestiones relacionadas