http - significado - url shortener
Espacios en las URL? (4)
Esta pregunta ya tiene una respuesta aquí:
- ¿Se permite que una URL contenga un espacio? 11 respuestas
w3fools afirma que las URL pueden contener espacios: http://w3fools.com/#html_urlencode
¿Es esto cierto? ¿Cómo puede una URL contener un espacio no codificado?
Tengo la impresión de que la línea de solicitud de una solicitud HTTP usa un espacio como delimitador, con el formato {the method}{space}{the path}{space}{the protocol}
:
GET /index.html http/1.1
Por lo tanto, ¿cómo puede una URL contener un espacio? Si puede, ¿de dónde viene la práctica de reemplazar espacios con +
?
En verdad son tontos. Si observa el Apéndice A de RFC 3986 , verá que el "espacio" simplemente no se menciona en ninguna parte de la gramática para definir una URL. Como no se menciona en ninguna parte de la gramática, la única forma de codificar un espacio es mediante la codificación porcentual ( %20
).
De hecho, el RFC incluso establece que los espacios son delimitadores y deben ser ignorados:
En algunos casos, es posible que haya que agregar espacios en blanco adicionales (espacios, saltos de línea, pestañas, etc.) para romper un URI largo entre líneas. El espacio en blanco debe ignorarse cuando se extrae el URI.
y
Para mayor robustez, el software que acepta URI escrito por el usuario debe intentar reconocer y eliminar tanto los delimitadores como el espacio en blanco incrustado.
Curiosamente, el uso de +
como una codificación para el espacio no se menciona en el RFC, aunque está reservado como un sub-delímetro. Sospecho que su uso es simplemente convencional o está cubierto por un RFC diferente (posiblemente HTTP).
La información allí es, creo, parcialmente correcta:
Eso no es cierto. Una URL puede usar espacios. Nada define que un espacio sea reemplazado por un signo +.
Como notó, una URL NO puede usar espacios. La solicitud HTTP se arruinaría. No estoy seguro de dónde se define +
, aunque %20
es estándar.
Los espacios simplemente se reemplazan por "% 20" como:
Una URL no debe contener un espacio literal. Debe estar codificado utilizando la codificación percent-encoding o una codificación diferente que utiliza caracteres seguros para URL (como application/x-www-form-urlencoded que usa +
lugar de %20
para espacios).
Pero si la declaración es correcta o incorrecta depende de la interpretación: sintácticamente, un URI no debe contener un espacio literal y debe estar codificado; semánticamente, un %20
no es un espacio (obviamente) pero representa un espacio.