598 votes

Quelle est la longueur maximale possible d'une chaîne de requête ?

Cela dépend-il du navigateur ? De même, les différentes piles web ont-elles des limites différentes quant à la quantité de données qu'elles peuvent obtenir de la requête ?

0 votes

Vous pouvez également vérifier ceci stackoverflow.com/questions/417142/

0 votes

C'est seulement pour les requêtes GET ! La taille maximale des requêtes POST (avec ou sans multipart/form-data) est ici inconnue !

1051voto

Robert Cartaino Points 12173

RFC 2616 (Hypertext Transfer Protocol - 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). RFC 3986 (Uniform Resource Identifier - URI) indique également qu'il n'y a pas de limite, mais précise que le nom d'hôte est limité à 255 caractères en raison des limitations du DNS (section 2.3.3).

Bien que les spécifications ne précisent pas de longueur maximale, des limites pratiques sont imposées par le navigateur web et le logiciel du serveur. Basé sur une recherche qui n'est malheureusement plus disponible sur son site d'origine (elle mène à un site de prêt d'apparence douteuse) mais qui peut toujours être trouvée à l'adresse suivante Archives Internet de Boutell.com :

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

  • Chrome
    Il s'arrête en affichant l'URL après 64k caractères, mais peut servir plus de 100k caractères. Aucun autre test n'a été effectué au-delà.

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

  • Safari (Navigateur)
    Au moins 80 000 caractères feront l'affaire. Aucun test n'a été effectué au-delà.

  • Opera (Navigateur)
    Il faut au moins 190 000 caractères. J'ai arrêté le test après 190 000 caractères. Opera 9 pour Windows a continué à afficher une URL entièrement modifiable, copiable et collable dans la barre d'adresse, même après 190 000 caractères.

  • Microsoft Internet Explorer (Navigateur)
    Microsoft indique que la longueur maximale d'une URL dans Internet Explorer est de 2 083 caractères, avec un maximum de 2 048 caractères dans la partie chemin de l'URL. Les tentatives d'utilisation d'URL plus longues que cela ont produit un message d'erreur clair dans Internet Explorer.

  • Apache (serveur)
    Les premières tentatives de mesure de la longueur maximale des URL dans les navigateurs Web se sont heurtées à une limite de longueur des URL du serveur d'environ 4 000 caractères, après quoi Apache produit une erreur "413 Entity Too Large". Nous avons utilisé la version la plus récente d'Apache disponible sur Red Hat Enterprise Linux 4. 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). Cette limite est configurable.

  • Perl HTTP::Daemon (serveur)
    Jusqu'à 8 000 octets, cela fonctionne. Ceux qui construisent des serveurs d'applications Web avec le module HTTP::Daemon de Perl se heurteront à une limite de 16 384 octets pour la taille combinée de tous les en-têtes de requête HTTP. Cette limite n'inclut pas les données des formulaires POST, les téléchargements de fichiers, etc. mais elle inclut l'URL. Dans la pratique, cela se traduit par une erreur 413 lorsqu'une URL dépasse largement les 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.

9 votes

Pourquoi ne dites-vous pas également le numéro de version au lieu de "Microsoft Internet Explorer (navigateur)" ?

6 votes

Il semble que la limite par défaut d'IIS pour la chaîne de requête soit nettement inférieure à 16 384 caractères - citée ici comme 2048 : iis.net/configreference/system.webserver/security/

0 votes

35voto

matwonk Points 416

Sécurité et performances recommandées Max. : 2048 CARACTERES

Bien qu'officiellement aucune limite ne soit spécifiée par la RFC 2616, de nombreux protocoles et recommandations de sécurité indiquent que maxQueryStrings sur un serveur doit être fixé à une limite maximale de 1024 caractères. L'ensemble de l'URL, y compris la chaîne de recherche, ne doit pas dépasser 2048 caractères. Cette mesure vise à prévenir la vulnérabilité de l'attaque DDOS/DOS par requête HTTP lente sur un serveur web. Celle-ci apparaît généralement comme une vulnérabilité sur le Qualys Web Application Scanner et d'autres scanners de sécurité.

Veuillez consulter l'exemple de code ci-dessous pour les serveurs Windows IIS avec Web.config :

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

Cela fonctionnerait également au niveau du serveur en utilisant machine.config.

Ceci ne concerne que les serveurs basés sur le système d'exploitation Windows, je ne suis pas sûr qu'il existe un problème similaire sur apache ou d'autres serveurs.

Remarque : limiter la longueur des chaînes de requête et des URL n'empêche pas complètement l'attaque DDOS "Slow HTTP Requests", mais c'est une mesure que vous pouvez prendre pour la prévenir.

Ajout d'une référence comme demandé dans les commentaires : https://www.raiseupwa.com/writing-tips/what-is-the-limit-of-query-string-in-asp-net/

9voto

Snazzer Points 2688

Je suppose que vous voulez dire la longueur maximale d'une chaîne uri. Ce site peut aider.

En général, lorsque les URI deviennent illisibles parce qu'ils sont trop longs, il est temps d'utiliser une requête POST à la place.

1voto

Yogi Ghorecha Points 974

2048 CARACTÈRES

Bien que officiellement, il n'y a pas de limite spécifié par RFC 2616 , beaucoup les protocoles de sécurité et les recommandations stipulent que maxQueryStrings sur un serveur doit être fixé à une limite maximale de caractères de 1024 . Alors que l'ensemble de l'URL, y compris la chaîne de recherche, doit être défini à une valeur max de 2048 caractères. Citation en bloc

Une URL est considérée comme trop longtemps si elle est plus longue que 100 caractères . Un site Une URL trop longue peut causent à la fois la convivialité et moteur de recherche : Tout avantage potentiel que vous pourriez avoir en incluant mots-clés sera sera dilué puisqu'il s'agit d'un si petit pourcentage du total. URL texte.

1voto

kdevine Points 33

Les différentes piles web supportent différentes longueurs de requêtes http. Je sais par expérience que les premières piles de Safari ne supportaient que 4000 caractères et avaient donc des difficultés à traiter les pages ASP.net à cause de l'USER-STATE. Cela vaut également pour les POST, il faut donc vérifier le navigateur et voir quelle est la limite de la pile. Je pense que vous pouvez atteindre une limite même sur les navigateurs les plus récents. Je ne me souviens pas mais l'un d'entre eux (IE6, je crois) avait une limite de 16 bits, 32 768 ou quelque chose comme ça.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X