¿Por qué el porcentaje de inicio de sesión en una URL causa un error de solicitud incorrecta HTTP 400?

22

Me topé con esto por accidente al escribir mal la URL de una página web en mi navegador web.

¿Por qué las visitas http://example.com/%provocan un error HTTP 400 Bad Request? ¿El servidor espera algo más después o antes del signo de porcentaje?

Parece suceder para los servidores Apache y Nginx.

iglvzx
fuente

Respuestas:

32

Respuesta corta

Según RFC 3986 , un %carácter simple no es una sintaxis de URI válida ; debe ir seguido de dos dígitos hexadecimales significativos .

Respuesta larga

El código de estado HTTP que obtuvo pertenece a la 4xxclase:

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

Fuente: Registro de código de estado del Protocolo de transferencia de hipertexto (HTTP)

En particular, el código 400está definido por el Grupo de trabajo de ingeniería de Internet (IETF) en RFC 2616:

10.4.1 400 Solicitud incorrecta

El servidor no pudo entender la solicitud debido a una sintaxis con formato incorrecto. El cliente NO DEBE repetir la solicitud sin modificaciones.

Fuente: RFC 2616 - Protocolo de transferencia de hipertexto - HTTP / 1.1

Citando Wikipedia (énfasis en negrita mío):

Los caracteres permitidos en un URI son o bien reservados o sin reservas ( o un carácter de porcentaje como parte de un código porciento ).

Fuente: codificación porcentual : codificación porcentual en un URI

Si desea insertar un literal %símbolo, es necesario utilizar la representación codificada por ciento-: %25.

Otras lecturas

y31415
fuente
No lo entiendo Si enmascaro el signo '%' con '% 25', el archivo aún no se servirá, pero se generará un error 400 en nuestro escenario (Apache -> JKMount -> Tomcat)
fiffy
Si tiene la siguiente RewriteRule RewriteRule (.*) xyz/$1(donde xyz es cualquier nombre de carpeta) en .htaccess, debe codificar dos veces% como% 2525.
Marco Marsala
9

El signo de porcentaje es para insertar un carácter que normalmente no es compatible con la url. Por ejemplo,% 20 es lo mismo que un espacio.

LPChip
fuente
44
Y para insertar un carácter de porcentaje en sí, es%25
Robotnik
A +es un método abreviado para codificar un espacio. Si desea un signo más real, use su código hexadecimal,% 2B.
Phil Perry
3
+ es la codificación correcta para un espacio solo dentro de una cadena de consulta. % 20 es la codificación correcta en otra parte de la url.
Eden Townsend