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.


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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.