2010-10-21 12 views
8

Sé que% 20 y + ambos decodifican con el mismo valor binario (un espacio), y para la mayoría de los servidores web, especialmente aquellos que se asignan a archivos físicos, apuntarán al mismo recurso.¿Son% 20 y más lo mismo en una url http?

Pero mi pregunta es, ¿una url como http://www.example.org/hello%20world apunta al mismo recurso que http://www.example.org/hello+world, son canónicamente lo mismo?

En HTTP/1.0 + no se asignó a un espacio, por lo que específicamente estoy preguntando sobre HTTP/1.1.

+0

Nunca se ha considerado esto antes, será interesante ver la respuesta correcta en esta, buena pregunta. – Dave

Respuesta

4

Solo dentro de la cadena de consulta: el signo más es un carácter reservado, por lo que debe codificarse para pasar un '+' real en la ruta o la cadena de consulta. Su uso como sustituto de espacios es un W3C Recommendation que sólo se aplica a la cadena de consulta:

Dentro de la cadena de consulta, en el signo más se reserva como notación abreviada para un espacio. Por lo tanto, los signos de suma reales deben estar codificados. Este método se usó para hacer que los URI de consulta fueran más fáciles de pasar en los sistemas que no permitían espacios.

URI Comparación (RFC 2616):

Al comparar dos URIs para decidir si que coinciden o no, un cliente debe utilizar un caso sensible octeto-por-octeto comparación de la totalidad URI, con las siguientes excepciones:

- A port that is empty or not given is equivalent to the default 
    port for that URI-reference; 

    - Comparisons of host names MUST be case-insensitive; 

    - Comparisons of scheme names MUST be case-insensitive; 

    - An empty abs_path is equivalent to an abs_path of "/". 

caracteres distintos de los de la "reservado" y " los conjuntos "inseguros" (consulte RFC 2396 [42]) son equivalentes a su codificación ""% "HEX HEX".

caracteres reservados (RFC 2396)

";" | "/" | "¿?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

Por lo tanto, en la tercera vuelta: no hay nada oficial que declare que son la misma cosa. Usar '+' literalmente para dirigir http://example.org/hello+world a un directorio llamado hello+world es incorrecto, pero no hay nada que diga que debería considerarse equivalente a un espacio.

+1

En la sección citada dice "** Dentro de la cadena de consulta, ** el signo más se reserva como notación abreviada de un espacio". Dentro de una cadena de consulta no es lo mismo que dentro de la url en general. En el caso general, la respuesta es no, sin embargo puede ser – Davy8

+1

En el ejemplo del OP de 'http: // www.example.org/hello% 20world' y' http: // www.example.org/hello + world' La sección que citó no se aplica porque no es parte de una cadena de consulta. – Davy8

+0

@ Davy8 - Creo que me has echado a la respuesta correcta ahora :) –

Cuestiones relacionadas