Pourquoi le pourcentage de connexion dans une URL provoque-t-il une erreur HTTP 400 Bad Request?

22

Je suis tombé dessus par accident en tapant mal l'URL d'une page Web dans mon navigateur Web.

Pourquoi la visite http://example.com/%provoque-t-elle une erreur HTTP 400 Bad Request? Le serveur attend-il autre chose après ou avant le signe de pourcentage?

Cela semble se produire pour les serveurs Apache et Nginx.

iglvzx
la source

Réponses:

32

Réponse courte

Selon RFC 3986 , un %caractère nu n'est pas une syntaxe URI valide ; il doit être suivi de deux chiffres hexadécimaux significatifs .

Longue réponse

Le code d'état HTTP que vous avez obtenu appartient à la 4xxclasse:

4xx: Client Error - The request contains bad syntax or cannot be fulfilled

Source: Registre des codes d'état HTTP (Hypertext Transfer Protocol)

En particulier, le code 400est défini par l' Internet Engineering Task Force (IETF) dans la RFC 2616:

10.4.1 400 Mauvaise requête

La demande n'a pas pu être comprise par le serveur en raison d'une syntaxe incorrecte. Le client NE DEVRAIT PAS répéter la demande sans modifications.

Source: RFC 2616 - Protocole de transfert hypertexte - HTTP / 1.1

Citant Wikipédia (gras en gras):

Les caractères autorisés dans un URI sont soit réservés ou non réservés ( ou un caractère pour cent dans le cadre d'un codage pour cent ).

Source: codage en pourcentage - codage en pourcentage dans un URI

Si vous souhaitez insérer un littéral %symbole, vous devez utiliser la représentation codée pour cent-: %25.

Lectures complémentaires

et31415
la source
Je ne comprends pas. Si je masque le signe '%' avec '% 25' le fichier ne sera toujours pas servi mais une erreur 400 sera levée dans notre scénario (Apache -> JKMount -> Tomcat)
fiffy
Si vous avez le RewriteRule suivant RewriteRule (.*) xyz/$1(où xyz est n'importe quel nom de dossier) dans .htaccess, vous devez double- coder% en% 2525.
Marco Marsala
9

Le signe de pourcentage sert à insérer un caractère qui n'est normalement pas pris en charge dans l'url. Par exemple,% 20 est identique à un espace.

LPChip
la source
4
Et pour insérer un caractère de pourcentage lui-même, c'est%25
Robotnik
A +est un moyen de raccourci pour encoder un espace. Si vous voulez un vrai signe plus, utilisez son code hexadécimal,% 2B.
Phil Perry
3
+ est le codage correct pour un espace uniquement dans une chaîne de requête. % 20 est le codage correct ailleurs dans l'URL.
Eden Townsend