Question

Est-ce que cela dépend du navigateur? De plus, les différentes piles Web ont-elles des limites différentes quant au volume de données qu'elles peuvent obtenir de la requête?

Était-ce utile?

La solution

RFC 2616 (Protocole de transfert d'hypertexte - HTTP / 1.1) indique qu'il n'y a pas de limite à la longueur d'une chaîne de requête (section 3.2.1). La RFC 3986 indique également qu'il n'y a pas de limite, mais que le nom d'hôte est limité à 255 caractères en raison de DNS limitations (section 2.3.3).

Bien que les spécifications ne spécifient aucune longueur maximale, des limites pratiques sont imposées par le navigateur Web et le logiciel serveur. D'après les recherches effectuées à l'adresse Boutell.com :

  • Microsoft Internet Explorer (navigateur)
    Microsoft indique que la longueur maximale d'une URL dans Internet Explorer est de 2 083 caractères, dont 2 048 caractères maximum dans la partie chemin de l'URL. Les tentatives d'utilisation d'URL plus longues que celle-ci ont généré un message d'erreur clair dans Internet Explorer.

  • Microsoft Edge (navigateur)
    La limite semble être autour de 81578 caractères. Voir Limitation de la longueur d'URL de Microsoft Edge

  • Chrome
    Il arrête d'afficher l'URL après 64k caractères, mais peut servir plus de 100k caractères. Aucun autre test n'a été fait après cela.

  • Firefox (navigateur)
    Après 65 536 caractères, la barre d’emplacement n’affiche plus l’URL dans Windows Firefox 1.5.x. Cependant, des URL plus longues fonctionneront. Aucun autre test n'a été effectué après 100 000 caractères.

  • Safari (navigateur)
    Au moins 80 000 caractères fonctionneront. Les tests n'ont pas été testés au-delà de cela.

  • Opera (navigateur)
    Au moins 190 000 caractères fonctionneront. Arrêt des tests après 190 000 caractères. Opera 9 pour Windows a continué d'afficher une édition entièrement éditable, URL copiable et pouvant être collée dans la barre d’emplacement, même à 190 000 caractères.

  • Apache (serveur)
    Les premières tentatives de mesure de la longueur maximale de l'URL dans les navigateurs Web ont été déplacées dans une limite de longueur d'URL de serveur d'environ 4 000 caractères, après quoi Apache a généré un "413 Entity Too Large". Erreur. La version Apache actuelle mise à jour, trouvée dans Red Hat Enterprise Linux 4, a été utilisée. La documentation officielle d'Apache ne mentionne qu'une limite de 8 192 octets pour un champ individuel dans une requête.

  • Microsoft Internet Information Server (Serveur)

    La limite par défaut est de 16 384 caractères (oui, le serveur Web de Microsoft accepte des URL plus longues que le navigateur Web de Microsoft). Ceci est configurable.

  • Perl HTTP :: Daemon (Serveur)
    Jusqu'à 8 000 octets fonctionneront. Ceux qui construisent des serveurs d'applications Web avec le module HTTP :: Daemon de Perl rencontreront une limite de 16 384 octets pour la taille combinée de tous les en-têtes de demandes HTTP. Cela n'inclut pas les données de formulaire POST-method, les téléchargements de fichiers, etc., mais inclut l'URL. En pratique, cela entraînait une erreur 413 lorsqu'une URL dépassait considérablement 8 000 caractères. Cette limitation peut être facilement supprimée. Recherchez toutes les occurrences de 16x1024 dans Daemon.pm et remplacez-les par une valeur plus grande. Bien entendu, cela augmente votre exposition aux attaques par déni de service.

Autres conseils

Bien qu’officiellement, il n’y ait pas de limite, de nombreuses recommandations de configuration de la sécurité indiquent que maxQueryStrings sur un serveur doit être défini sur une limite de caractères maximale de 1024, tandis que l’URL complète, y compris la chaîne de requête, doit être définie sur un maximum de 2048 caractères. Cela permet d'éviter la vulnérabilité de requête HTTP lente sur un serveur Web et d'éviter les attaques DDOS lentes apparaissant sur l'analyseur d'applications Web Qualys et d'autres analyseurs de sécurité.

Veuillez consulter le code ci-dessous pour les serveurs Windows IIS avec Web.config:

<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>

Différentes piles Web prennent en charge différentes longueurs de requêtes http. Je sais par expérience que les premières piles de Safari ne prenaient en charge que 4 000 caractères et rencontraient donc des difficultés pour gérer les pages ASP.net en raison de USER-STATE. Même pour POST, il vous faudra donc vérifier le navigateur et voir quelle est la limite de pile. Je pense que vous pouvez atteindre une limite même sur les nouveaux navigateurs. Je ne me souviens pas, mais l’un d’eux (IE6, je pense) avait une limite de 16 bits, 32 768 ou quelque chose du genre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top