Perché la percentuale di accesso a un URL provoca un errore HTTP 400 Bad Request?


22

Mi sono imbattuto per caso quando ho sbagliato a digitare l'URL di una pagina Web nel mio browser.

Perché la visita http://example.com/%provoca la generazione di un errore HTTP 400 Bad Request? Il server si aspetta qualcos'altro dopo o prima del segno di percentuale?

Sembra accadere per i server Apache e Nginx.


Risposte:


32

Risposta breve

Secondo RFC 3986 , un %carattere nudo non è una sintassi URI valida ; dovrebbe essere seguito da due cifre esadecimali significative .

Risposta lunga

Il codice di stato HTTP ottenuto appartiene alla 4xxclasse:

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

Fonte: registro dei codici di stato HTTP (Hypertext Transfer Protocol)

In particolare, il codice 400è definito da Internet Engineering Task Force (IETF) in RFC 2616:

10.4.1 400 Richiesta non valida

La richiesta non è stata compresa dal server a causa di una sintassi non corretta. Il client NON DOVREBBE ripetere la richiesta senza modifiche.

Fonte: RFC 2616 - Hypertext Transfer Protocol - HTTP / 1.1

Citando Wikipedia (grassetto mio enfasi):

I caratteri consentiti in un URI sono riservati o non riservati ( o un carattere percentuale come parte di una codifica percentuale ).

Fonte: codifica percentuale - codifica percentuale in un URI

Se si desidera inserire un letterale %simbolo, è necessario utilizzare la sua rappresentazione per cento con codifica: %25.

Ulteriori letture


Non capisco Se maschera il segno '%' con '% 25' il file non verrà ancora pubblicato ma verrà generato un errore 400 nel nostro scenario (Apache -> JKMount -> Tomcat)
fiffy

Se si ha la seguente RewriteRule RewriteRule (.*) xyz/$1(dove xyz è un qualsiasi nome della cartella) in .htaccess, si dovrebbe raddoppiare % -encode come% 2525.
Marco Marsala,

9

Il segno di percentuale serve per inserire un carattere che normalmente non è supportato nell'URL. Ad esempio% 20 è uguale a uno spazio.


4
E per inserire un carattere percentuale, è%25
Robotnik

A +è un modo di scelta rapida per codificare uno spazio. Se vuoi un vero segno più, usa il suo codice esadecimale,% 2B.
Phil Perry,

3
+ è la codifica corretta per uno spazio solo all'interno di una stringa di query. % 20 è la codifica corretta altrove all'interno dell'URL.
Eden Townsend,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.