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


Est-ce dépendant du navigateur? En outre, différentes piles Web ont-elles des limites différentes quant à la quantité de données qu'elles peuvent obtenir de la demande?


448
2018-05-01 19:44


origine


Réponses:


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 indique également qu'il n'y a pas de limite, mais indique que le nom d'hôte est limité à 255 caractères en raison des limitations DNS (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. Basé sur la recherche trouvée à Boutell.com:

  • 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 d'accès de l'URL. Les tentatives d'utilisation d'URL plus longues ont généré un message d'erreur clair dans Internet Explorer.

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

  • Chrome
    Ça s'arrête affichage l'URL après 64k caractères, mais peut servir plus de 100k caractères. Aucun autre test n'a été fait au-delà de 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, les 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é essayé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é à afficher un entièrement modifiable, URL copiable et modifiable dans la barre d'adresse, même à 190 000 caractères.

  • Apache (Serveur)
    Les premières tentatives pour mesurer la longueur maximale de l'URL dans les navigateurs Web ont abouti à une limite de longueur d'URL de serveur d'environ 4 000 caractères, après quoi Apache a généré une erreur "413 Entity Too Large". La version Apache actuelle mise à jour dans Red Hat Enterprise Linux 4 a été utilisée. La documentation officielle Apache mentionne seulement une limite de 8 192 octets sur un champ individuel dans une demande.

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

  • Perl HTTP :: Daemon (Server)
    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 sur la taille combinée de tous les en-têtes de requête HTTP. Cela n'inclut pas les données de formulaire de méthode POST, les téléchargements de fichiers, etc., mais inclut l'URL. En pratique, cela entraînait une erreur 413 lorsqu'une URL dépassait nettement 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 sûr, cela augmente votre exposition aux attaques par déni de service.


835
2018-05-01 19:53



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

Généralement, une fois que les URI deviennent illisibles car ils sont trop longs, il est temps d'utiliser une requête POST à ​​la place.


7
2018-05-01 19:47



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 du mal à gérer les pages ASP.net à cause de l'USER-STATE. C'est même pour POST, donc vous devrez 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 peux pas me rappeler mais l'un d'entre eux (IE6, je pense) avait une limite de limite de 16 bits, 32 768 ou quelque chose.


1
2018-05-01 19:52



Bien qu'il n'existe officiellement aucune limite, de nombreuses recommandations de configuration de sécurité stipulent 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 au maximum de 2048 caractères. Cela permet d'éviter la vulnérabilité Slow HTTP Request sur un serveur Web pour empêcher les attaques DDOS lentes.


1
2018-01-12 16:37