2009-05-01 20 views
425

¿Es dependiente del navegador? Además, ¿diferentes pilas de web tienen límites diferentes sobre la cantidad de datos que pueden obtener de la solicitud?¿Cuál es la longitud máxima posible de una cadena de consulta?

+0

también puede consultar este http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-an-url – Xinus

+0

¡Es solo para solicitudes GET! El tamaño máximo de las solicitudes POST (con o sin multipart/form-data) se desconoce aquí. – peterh

Respuesta

796

RFC 2616 (Protocolo de transferencia de hipertexto - HTTP/1.1) establece que no hay límite en la longitud de una cadena de consulta (sección 3.2.1). RFC 3986 también indica que no hay límite, pero indica que el nombre de host está limitado a 255 caracteres debido a las limitaciones de DNS (sección 2.3.3).

Si bien las especificaciones no especifican ninguna longitud máxima, el navegador web y el software de servidor imponen límites prácticos. Basado en la investigación que se encuentra en Boutell.com:

  • Microsoft Internet Explorer (Navegador)
    Microsoft afirma que la longitud máxima de una URL en Internet Explorer es de 2083 caracteres, con no más de 2.048 caracteres de la ruta porción de la URL. Los intentos de utilizar URLs más largas que esto produjeron un mensaje de error claro en Internet Explorer.

  • Microsoft Edge (Navegador)
    El límite parece ser alrededor de 81.578 caracteres. Ver URL Length limitation of Microsoft Edge

  • Chrome
    Se detiene mostrando la URL después de 64k caracteres, pero puede servir a más de 100 mil caracteres. No se realizaron más pruebas más allá de eso.

  • Firefox (navegador)
    Después de 65.536 caracteres, la barra de direcciones ya no muestra la dirección URL en Firefox 1.5.x. de Windows Sin embargo, las URL más largas funcionarán. No se realizaron más pruebas después de 100.000 caracteres.

  • Safari (navegador)
    Al menos 80.000 caracteres va a funcionar. Las pruebas no fueron probadas más allá de eso.

  • Opera (navegador)
    Al menos 190.000 caracteres va a funcionar. Dejó de realizar pruebas después de 190,000 caracteres. Opera 9 para Windows continuó mostrando una URL para copiar y pegar totalmente editable, en la barra de direcciones, incluso con 190,000 caracteres.

  • Apache (Server)
    Los primeros intentos de medir la longitud máxima URL en los navegadores web golpeado en un límite de longitud de dirección URL del servidor de aproximadamente 4.000 caracteres, después de lo cual Apache produce un error "413 Entidad demasiado grande". Se utilizó la versión actualizada de Apache encontrada en Red Hat Enterprise Linux 4. La documentación oficial de Apache solo menciona un límite de 8.192 bytes en un campo individual en una solicitud.

  • Microsoft Internet Information Server (Servidor)
    El límite predeterminado es 16.384 caracteres (sí, el servidor web de Microsoft acepta URL de más de navegador web de Microsoft). Esto es configurable.

  • Perl HTTP :: Daemon (Servidor)
    Hasta 8.000 bytes va a funcionar. Aquellos que construyen servidores de aplicaciones web con el módulo HTTP :: Daemon de Perl encontrarán un límite de 16,384 bytes en el tamaño combinado de todos los encabezados de solicitud HTTP. Esto no incluye datos de formularios POST-method, cargas de archivos, etc., pero sí incluye la URL. En la práctica, esto dio como resultado un error 413 cuando una URL era significativamente más larga que 8,000 caracteres. Esta limitación se puede eliminar fácilmente. Busque todas las ocurrencias de 16x1024 en Daemon.pm y reemplácelas con un valor mayor. Por supuesto, esto aumenta su exposición a ataques de denegación de servicio.

+3

¿Por qué no dice el número de versión también en lugar de "Microsoft Internet Explorer (navegador)"? – Lijo

+0

Gracias por limitar el número de caracteres en lugar de bytes o algo :) Fácil de entender. – sun

+5

Parece que el límite de IIS predeterminado en Query String es significativamente menor que 16,384 caracteres, se cita como 2048 aquí: https://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits – JTech

7

Supongo que quiere decir la longitud máxima para una cadena uri. This puede ayudar.

Normalmente, una vez que los URI se vuelven ilegibles porque son demasiado largos, es el momento de usar una solicitud POST en su lugar.

+38

Cambiar a una solicitud POST simplemente porque hay demasiados datos para caber en una solicitud GET tiene poco sentido. –

+0

@Johannes Si GET no funciona, pero POST lo hace, entonces ¿por qué no tiene sentido cambiar a POST? –

+8

@Eugene Beresovksy: Porque GET y POST significan cosas diferentes (refiérase a la [especificación HTTP/1.1] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)). –

1

Las diferentes acumulaciones de banda soportan diferentes longitudes de solicitudes http. Sé por experiencia que las primeras acumulaciones de Safari solo admitían 4000 caracteres y, por lo tanto, tenían dificultades para manejar las páginas de ASP.net debido a USER-STATE. Esto es incluso para POST, por lo que debería verificar el navegador y ver cuál es el límite de la pila. Creo que puede llegar a un límite incluso en los navegadores más nuevos. No puedo recordar, pero uno de ellos (IE6, creo) tenía un límite de límite de 16 bits, 32.768 o algo así.

0

Aunque oficialmente no existe un límite, muchas de las recomendaciones de configuración de seguridad afirman que maxQueryStrings en un servidor deben establecerse en un límite de caracteres máximo de 1,024, mientras que la dirección URL completa que incluye la cadena de consulta se debe establecer en un máximo de 2048 caracteres. Esto es para evitar la vulnerabilidad de Solicitud HTTP lenta en un servidor web para evitar ataques DDoS lentos.

Cuestiones relacionadas