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

Est-ce que cela dépend du navigateur? En outre, différentes stacks Web ont-elles des limites différentes quant à la quantité de données qu’elles peuvent obtenir de la demande?

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). La 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 du 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 les recherches trouvées à 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’access de l’URL. Les tentatives d’utilisation d’URL plus longues que cela 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 la limitation de longueur d’URL de Microsoft Edge

  • Chrome
    Il cesse d’ afficher l’URL après 64 k caractères, mais peut servir plus de 100 000 caractères. Aucun autre test n’a été effectué 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 continuait d’afficher une URL entièrement modifiable, copiable et utilisable dans la barre d’emplacement, même avec 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 actuelle d’Apache à jour dans Red Hat Enterprise Linux 4 a été utilisée. La documentation officielle Apache ne mentionne qu’une limite de 8 192 octets sur 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 (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êtes 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 nettement 8 000 caractères. Cette limitation peut être facilement supprimée. Recherchez toutes les occurrences de 16×1024 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.

Je suppose que vous voulez dire la longueur maximale pour une chaîne d’URI. Cela 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.

Différentes stacks Web prennent en charge différentes longueurs de requêtes HTTP. Je sais par expérience que les premières stacks de Safari ne supportaient que 4000 caractères et que, par conséquent, les pages ASP.net étaient difficiles à gérer à cause de USER-STATE. C’est même pour le POST, vous devrez donc vérifier le navigateur et voir quelle est la limite de la stack. Je pense que vous pouvez atteindre une limite même sur les nouveaux navigateurs. Je ne me souviens pas, mais l’un d’entre eux (IE6, je pense) avait une limite de 16 bits, 32 768 ou quelque chose.

Bien qu’il n’y ait pas officiellement de limite, de nombreuses recommandations de configuration de sécurité indiquent que maxQuerySsortingngs sur un serveur doit être défini sur une limite de caractères maximale de 1024 tandis que l’URL entière, y compris la chaîne de requête, doit comporter 2048 caractères maximum. Cela permet d’éviter la vulnérabilité Slow HTTP Request sur un serveur Web pour empêcher les attaques DDOS lentes.