¿Se permite que una URL contenga un espacio?


¿Se permite que un URI (específicamente una URL HTTP) contenga uno o más caracteres de espacio? Si una URL debe ser codificada, es + solo una convención comúnmente seguida, o una alternativa legítima?

En particular, ¿puede alguien apuntar a un RFC que indica que una URL con un espacio debe ser codificada?

Motivación para la pregunta: Mientras probaba un sitio web, noté que algunas URL se construyeron con espacios en ellas. Firefox parecía hacer lo correcto cosa que me sorprendió! Pero quería poder señalar a los desarrolladores a un RFC para que sintieran la necesidad de corregir esas URL.

Author: DavidRR, 2009-01-31

11 answers

Según RFC 1738:

Inseguro:

Los caracteres pueden ser inseguros por varias razones. El espacio carácter no es seguro porque los espacios significativos pueden desaparecer y se pueden introducir espacios insignificantes cuando se transcriben URLs o tipografiado o sometido al tratamiento de programas de procesamiento de textos. Los caracteres "<" y ">" no son seguros porque se utilizan como delimitadores alrededor de URLs en texto libre; el la comilla (""") se usa para delimitar URLs en algunos sistemas. El carácter "#" es inseguro y debe siempre estar codificado porque se utiliza en la World Wide Web y en otros sistemas para delimitar una URL de un identificador de fragmento/ancla que podría síguelo. El carácter "%" no es seguro porque se utiliza para codificaciones de otros caracteres. Otros personajes son inseguros porque se sabe que las pasarelas y otros agentes de transporte a veces modifican qué personajes. Estos los personajes son "{", "}", "|", "\", "^", "~", "[", "]", y "`".

Todos los caracteres inseguros deben estar siempre codificados dentro de una URL . Para por ejemplo, el carácter "#" debe estar codificado dentro de las URL incluso en sistemas que normalmente no se ocupan de fragmentos o anclajes identificadores, de modo que si la URL se copia en otro sistema que si los usa, no será necesario cambiar la codificación de la URL.

 88
Author: Marc Novakowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-19 09:24:33

¿Por qué tiene que ser codificado? Una solicitud se ve así:

GET /url HTTP/1.1
(Ignoring headers)

Hay 3 campos separados por un espacio en blanco. Si pones un espacio en tu url:

GET /url end_url HTTP/1.1

Usted sabe que tiene 4 campos, el servidor HTTP le dirá que es una solicitud no válida.

GET /url%20end_url HTTP/1.1

3 campos = > válido

Nota: en la cadena de consulta (después de ?), un espacio se codifica normalmente como a +

GET /url?var=foo+bar HTTP/1.1 

En lugar de

GET /url?var=foo%20bar HTTP/1.1 
 40
Author: Julien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-31 01:44:31

Respuesta más corta: no, debe codificar un espacio; es correcto codificar un espacio como +, pero solo en la cadena de consulta; en la ruta debe usar %20.

 29
Author: Peter Hilton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-31 01:41:50

URLs se definen en RFC 3986, aunque otros RFC también son relevantes, pero RFC 1738 es obsoleto.

Pueden no tener espacios en ellos, junto con muchos otros caracteres. Dado que esos caracteres prohibidos a menudo necesitan ser representados de alguna manera, hay un esquema para codificarlos en una URL traduciéndolos a su equivalente hexadecimal ASCII con un prefijo"%".

La mayoría de los lenguajes/plataformas de programación proporcionan funciones para codificar y decodificar URLs, aunque pueden no adherirse correctamente a los estándares RFC. Por ejemplo, sé que PHP no lo hace.

 9
Author: Rob Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-01 16:09:33

Sí, aunque el espacio normalmente está codificado en "%20". Cualquier parámetro que pase a una URL debe ser codificado, simplemente por razones de seguridad.

 5
Author: user54650,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-31 01:04:45

¿Puede alguien apuntar a un RFC indicando que una URL con un espacio debe ser codificada?

Las URI, y por lo tanto las URLs, están definidas en el RFC 3986.

Si nos fijamos en la gramática definida allí, eventualmente notaremos que un carácter de espacio nunca puede ser parte de una URL sintácticamente legal, por lo que el término "URL con un espacio" es una contradicción en sí mismo.

 5
Author: Julian Reschke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-31 19:11:28

La URL puede tener un Carácter de Espacio en ellas y se mostrarán como %20 en la mayoría de los navegadores, pero las reglas de codificación del navegador cambian muy a menudo y no podemos depender de cómo un navegador mostrará la URL.

Así que en su lugar puedes reemplazar el Carácter de Espacio en la URL con cualquier carácter que creas que hará que la URL sea más legible y 'Bonita';)..... O por lo que los caracteres generales que se prefieren son "-","_","+" .... pero estas no son las compulsiones por lo que puede utilizar cualquiera de los carácter que no se supone que esté en la URL Ya.

Por favor, evite el %,&,},{,],[,/,>,

Como puede ver, el propio desbordamiento de Stak usa el carácter '-' como reemplazo del Espacio(%20).

Tener un interrogatorio feliz.

 4
Author: A.M Web Surfer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-24 08:57:23

Para responder a su pregunta. Yo diría que es bastante común que las aplicaciones reemplacen los espacios en los valores que se utilizarán en las URL. La razón de esto es generalmente para evitar la codificación de porcentaje (URI) más difícil de leer que ocurre.

Echa un vistazo a este artículo de wikipedia sobre Por ciento-codificación.

 4
Author: Eric Schoonover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 01:44:35

Las urls deben no tener espacios en ellas. Si necesita dirigirse a uno que lo haga, use su valor codificado de %20

 3
Author: Chris Ballance,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-31 01:07:46

Firefox 3 mostrará %20s en URLs como espacios en la barra de direcciones.

 2
Author: Sophie Alpert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-31 01:08:33

No he visto eso. Tal vez usted puede configurar el servidor web para aceptar eso...

 -3
Author: T.T.T.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-31 01:05:47