2010-09-15 18 views
29

Las versiones anteriores de Internet Explorer croaked en direcciones web de más de 2.083 caracteres (consulte http://support.microsoft.com/kb/208427). Mientras tanto, Firefox, Opera y Safari pueden manejar al menos 80,000.¿Cuánto tiempo de una URL puede tomar Internet Explorer 9?

La versión 9 trae muchas mejoras. ¿La longitud de la URL es uno de ellos?

+2

Pertenece en superusuario.com – dogbane

+19

@fahd no, no es información esencial para desarrolladores web –

+1

La longitud no es lo único que importa ... se trata de cómo puede usarla: los servidores pueden tener un límite significativamente más pequeño para protegerse de vulnerabilidades e intrusiones no autorizadas. – Archimedix

Respuesta

18

No es la respuesta más precisa, pero parece que tiene 2083 caracteres en la barra de direcciones y 5165 caracteres cuando sigue un enlace.

(No oficial de ninguna manera, simplemente enchufar una URL con 41.000 caracteres en un archivo HTM prueba y utiliza Javascript para consultar la longitud de la URL.)

Actualización:

para reproducir la prueba, crea un archivo HTML con un elemento ancla cuyo atributo HREF tiene 6000 caracteres de longitud. Abra el archivo en su navegador y haga clic en el enlace. A continuación, abra la consola y marque window.location.href.length.

Siguiendo este procedimiento en IE9 hoy, informa la longitud como 5165 caracteres. Si cargo la misma URL manualmente a través de la barra de direcciones, informa 2083 caracteres.

Por lo que vale, IE parece truncar la URL antes de enviar la solicitud. Si pongo una URL de 24,000 caracteres en el atributo HREF del ancla, IE seguirá el enlace pero la página resultante informa una longitud de URL de 5165 caracteres. Seguir el mismo enlace en Chrome da como resultado una respuesta HTTP 414 de mi servidor de prueba.

+0

No he visto ninguna documentación sobre el límite 5150 en los enlaces, pero definitivamente explicaría algunos problemas que estoy teniendo ya que las URL en mis enlaces> 2083 caracteres están funcionando, pero fallan cuando se colocan en la barra de direcciones. ¿Esto solo es empírico? ¿Acabas de probar URL más grandes hasta que fallaron? – Chet

+0

@Chet actualizado ... – Farray

+0

muchas gracias, eso es muy útil. Le daré un vistazo. – Chet

9

me sale 5120 caracteres en una dirección URL de Internet Explorer 9.

de ninguna manera una prueba definitiva, pero lo que sigue demuestra una rápida verificación de longitud de la URL de un atributo href en una etiqueta de anclaje.

<html> 
    <head> 
     <script type="text/javascript"> 
      function init() { 
       var anchor = document.getElementById('anc'); 
       var valid = true; 
       var url = 'http://google.com/?search='; 
       var count = url.length; 

       while(valid) { 
        url = url + '1'; 
        anchor.href = url; 
        count++; 
        valid = anchor.href == url; 

        if(count > 100000) { 
         alert('Test reached 100,000, stopping...'); 
         valid = false; 
        } 
       } 
       alert('Complete, count = ' + count); 
      } 
     </script> 
    </head> 
    <body onload="init()"> 
     <a id="anc" href="http://google.com/">Test</a> 
    </body> 
</html> 
+2

Sonidos plausibles: las notas de la versión de IE9 incluyen lo siguiente: "IE9 presenta una compatibilidad mejorada para" Bookmarklets ": los límites de longitud de URL se relajaron". Desafortunadamente, no hay detalles RE su prueba: la longitud máxima de los HREF dentro de la página no es necesariamente la misma que la longitud máxima de la URL que el navegador transmitirá (por ejemplo, a través de la barra de direcciones). ¿Necesita verificar mediante el envío y comprobación de los registros del servidor para ver en qué punto se produce el truncamiento (o un error?). ¿Alguien tiene la información definitiva para IE9? – psdie

0

I wrote this test that keeps en la adición de 'a' al parámetro hasta que el navegador falla

C# parte:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult ParamTest(string x) 
{ 
    ViewBag.TestLength = 0; 
    if (!string.IsNullOrEmpty(x)) 
    { 
     System.IO.File.WriteAllLines("c:/result.txt", 
         new[] {Request.UserAgent, x.Length.ToString()}); 
     ViewBag.TestLength = x.Length + 1; 
    } 

    return View(); 
} 

Vista:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

<script type="text/javascript"> 
    $(function() { 
     var text = "a"; 
     for (var i = 0; i < parseInt(@ViewBag.TestLength)-1; i++) { 
      text += "a"; 
     } 

     document.location.href = "http://localhost:50766/Home/ParamTest?x=" + text; 
    }); 
</script> 

I added additional limits to IISExpressapplicationhost.config y web.config configuración maxQueryStringLength="32768".

también Added en las configuraciones

<headerLimits> 
    <add header="Content-type" sizeLimit="32768" /> 
</headerLimits> 

que no ayuda en absoluto, Finalmente se decantó por el violinista para eliminar árbitro de la cabecera.

static function OnBeforeRequest(oSession: Session) { 
if (oSession.url.Contains("localhost:50766")) { 
     oSession.RequestHeaders.Remove("Referer"); 
     } 

Lo hizo muy bien.

En IE9 que tiene

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) 
4043 
Cuestiones relacionadas