web-dev-qa-db-fra.com

Combien de temps d'une URL Internet Explorer 9 peut-il prendre?

Les versions précédentes d'Internet Explorer coassaient des adresses Web de plus de 2 083 caractères (voir http://support.Microsoft.com/kb/208427 ). Firefox, Opera et Safari peuvent en gérer au moins 80 000.

La version 9 apporte de nombreuses améliorations. La longueur de l'URL en fait-elle partie?

29
Andrew Banks

Pas la réponse la plus précise, mais cela ressemble à 2083 caractères dans la barre d'adresse et à 5165 caractères lorsque vous suivez un lien.

(Ce n'est pas officiel, vous venez de brancher une URL avec 41 000 caractères dans un fichier de test HTM et d'utiliser Javascript pour interroger la longueur de l'URL.)

Mettre à jour:

Pour reproduire le test, créez un fichier HTML avec un élément d'ancrage dont l'attribut HREF comporte 6000 caractères. Ouvrez le fichier dans votre navigateur et cliquez sur le lien. Puis ouvrez la console et vérifiez window.location.href.length

Suite à cette procédure dans IE9 aujourd'hui, il signale une longueur de 5 165 caractères. Si je charge la même URL manuellement via la barre d'adresse, il signale 2083 caractères.

Pour ce que ça vaut, IE semble tronquer l'URL avant d'envoyer la demande. Si je mets une URL de 24 000 caractères dans l'attribut HREF de l'ancre, IE suivra le lien, mais la page résultante indique une longueur d'URL de 5 165 caractères. Si vous suivez le même lien dans Chrome, vous obtenez une réponse HTTP 414 de mon serveur de test.

18
Farray

Je reçois 5120 caractères dans une URL pour Internet Explorer 9.

En aucun cas un test définitif, mais ce qui suit montre une vérification rapide de la longueur d’URL d’un attribut href dans une balise anchor.

<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>
9
fungus1487

J'ai écrit ce test qui conserve lors de l'ajout de 'a' au paramètre jusqu'à ce que le navigateur échoue

partie C #:

[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();
}

Vue:

<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>

J'ai ajouté des limites supplémentaires à IISExpressapplicationhost.config et web.config définissant maxQueryStringLength="32768".

aussi Ajouté à config

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

ce qui n'a pas aidé du tout, a finalement décidé d'utiliser un violoneur pour supprimer le référant de l'en-tête.

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

Ce qui a bien fait.

Sur IE9 je me suis

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
4043
0
Matas Vaitkevicius