539 votes

Longueur maximale de la requête HTTP GET

Quelle est la longueur maximale d'une requête HTTP GET?

Existe-t-il une erreur de réponse définie que le serveur peut/doit renvoyer s'il reçoit une requête GET qui dépasse cette longueur?

Cela concerne un API de service web, bien qu'il soit intéressant de connaître également les limites du navigateur.

11 votes

11 votes

@KillianDS Il n'a absolument rien à voir avec la longueur maximale d'une URL. La question concerne la longueur maximale d'une requête envoyée à une URL.

2 votes

@EJP le contenu 'data' d'une requête GET n'est rien de plus qu'une URI.

510voto

BalusC Points 498232

La limite dépend à la fois du serveur et du client utilisé (et le cas échéant, aussi du proxy utilisé par le serveur ou le client).

La plupart des serveurs et des clients ont une limite de 8192 octets (8 Ko), qui est généralement configurable quelque part dans les paramètres du serveur ou du client. La spécification HTTP recommande 8000 octets dans la section 4.1:

Il est RECOMMANDÉ que tous les expéditeurs et destinataires prennent en charge, au minimum, des URI d'une longueur de 8000 octets dans les éléments du protocole. Notez que cela implique que certaines structures et représentations sur le fil (par exemple, la ligne de requête dans HTTP/1.1) seront nécessairement plus grandes dans certains cas.

Mais ce n'est donc pas obligatoire. La limite est généralement plus basse dans les anciens clients. Par exemple, Internet Explorer avait une limite d'environ 2 Ko. La version précédente de la spécification HTTP indique même littéralement ce qui suit:

Note : les serveurs doivent être prudents en ce qui concerne la dépendance aux longueurs d'URI supérieures à 255 octets, car certaines implémentations de clients ou de proxy plus anciennes pourraient ne pas prendre en charge correctement ces longueurs.

Si la limite est dépassée dans le navigateur ou le serveur, la plupart tronqueront simplement les caractères dépassant la limite sans avertissement. Certains serveurs cependant peuvent envoyer une erreur HTTP 414 'URI Too Long'.

Si vous devez envoyer de grandes données, il vaut mieux utiliser POST au lieu de GET. Sa limite est beaucoup plus élevée, mais plus dépendante du serveur utilisé que du client. Généralement, jusqu'à environ 4 Go est autorisé par le serveur web moyen. Cela est également configurable quelque part dans les paramètres du serveur. Le serveur moyen affichera une erreur/exception spécifique au serveur lorsque la limite POST est dépassée, généralement sous la forme d'une erreur HTTP 500.

6 votes

Vous répondez à la question en termes de limitations du navigateur. Savez-vous s'il y a des différences entre GET et POST (en termes de taille de requête problématique) si, par exemple, HttpClient est utilisé pour interagir avec un serveur REST?

3 votes

Bien sûr, POST utilise le corps pour envoyer les données. La spécification HTTP n'impose pas de limite spécifique de taille pour les publications.

2 votes

Il est parfaitement permis par les spécifications Http de mettre un corps dans les requêtes GET et DELETE. Je l'ai testé en Java, et cela fonctionne. Malheureusement, ici encore, certains proxys pourraient couper le corps complet.

154voto

herenvardo Points 2333

Vous posez deux questions distinctes ici :

Quelle est la longueur maximale d'une requête HTTP GET ?

Comme déjà mentionné, HTTP lui-même n'impose aucune limite codée en dur sur la longueur de la requête ; mais les navigateurs ont des limites allant de 2 KB à 8 KB (255 octets si l'on compte les navigateurs très anciens).

Existe-t-il une erreur de réponse définie que le serveur peut/doit renvoyer s'il reçoit une requête GET dépassant cette longueur ?

C'est la question à laquelle personne n'a répondu.

HTTP 1.1 définit le code d'état 414 Request-URI Too Long pour les cas où une limite définie par le serveur est atteinte. Vous pouvez voir plus de détails sur RFC 2616.

Pour le cas des limites définies par le client, il n'y a pas de sens à ce que le serveur renvoie quelque chose, car le serveur ne recevra pas du tout la requête.

5voto

jay Points 5017

Une question similaire se trouve ici : Y a-t-il une limite à la longueur d'une requête GET ?

J'ai atteint la limite sur mon compte d'hébergement partagé, mais le navigateur a affiché une page blanche avant d'atteindre le serveur je crois.

5voto

MSI Points 223

Techniquement, j'ai vu que les requêtes HTTP GET poseront problème si la longueur de l'URL dépasse 2000 caractères. Dans ce cas, il est préférable d'utiliser HTTP POST ou de diviser l'URL.

-3voto

sanjay singh Points 7

La méthode Get et Post est utilisée pour envoyer des données au serveur soumises par le formulaire html. La méthode Get a une limite de données. elle ne peut envoyer que des données limitées en fonction du navigateur mais la méthode Post n'a pas de limite de données. nous n'utilisons jamais la méthode get pour traiter des données sensibles car les données sont affichées dans l'url (chaîne de requête). La requête Get reste dans le navigateur, elle peut être mise en favori. la requête Post ne reste pas dans le navigateur, elle ne peut donc pas être mise en favori.

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