2012-03-01 24 views
8

Lo que realmente no entiendo es la ventaja de usar '?' en lugar de '&' en las URL:Separador de parámetros en urls, el caso del signo de interrogación mal usado

question mark vs ampersand

Se hace la vida de nadie más fácil si utilizamos un carácter diferente como el primer carácter de separación. ¿Se puede dar una explicación razonable?

EDITAR: después de más investigaciones encontré que "&" puede ser una parte del nombre del archivo (términos & conditions.html) entonces "?" es un buen separador Pero aún así creo que usar "?" para separadores hace vida más fácil (de generadores y analizadores de URL punto de vista):

question mark as separator

¿Hay alguna ventaja en el uso de "&", que no está claro a primera vista?

Respuesta

7

Desde el punto de vista de la especificación URI (RFC 3986), el único separador aquí es "?". el formato de la consulta es opaco; los signos y signos son solo algo que HTML usa para enviar formularios.

+0

¿Entonces se han desarrollado en diferentes momentos? HTML estaba allí antes de URI? –

+0

Sí, se desarrollaron por separado, pero no, el HTML no existía antes de los URI (anteriormente denominados URL). –

+4

Entonces la respuesta puede ser algo así como "HTML y URI desarrollados por separado y los desarrolladores de HTML no han notado el beneficio de usar? Como separador de parámetros en lugar de &" excepto que diría "no lo he notado" no es exacto.Pueden tener una buena razón. –

4

La respuesta está más o menos en este artículo - http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/. Para poner de relieve que, aquí va:

de consulta es la manera preferida para enviar algunos parámetros a un recurso en el servidor . Estos son pares clave = valor y están separados del resto de la URL por un? (signo de interrogación) y normalmente están separados entre sí por & (ampersand) caracteres. Lo que quizás no sepa es el hecho de que es legal separarlos por el; (punto y coma) también. Las siguientes URL son equivalentes:

http://www.blah.com/some/crazy/path.html?param1=foo&param2=bar

http://www.blah.com/some/crazy/path.html?param1=foo;param2

-1

El RFC 3896 (https://www.ietf.org/rfc/rfc3986.txt) define delimitadores generales y sub ... '?' es un general, '&' y ';' están sub. La especificación es bastante clara al respecto.

En este caso, este último '?' los caracteres se tratarían como parte de la consulta. Si el analizador de consultas sigue la especificación estrictamente, pasará toda la consulta al destino de la aplicación. Si la aplicación de destino podría optar por seguir procesando la cadena de consulta de una manera que trata el? como un delimitador de pares nombre-valor de nombre, eso depende de los diseñadores de la aplicación.

Supongo que esto a menudo 'simplemente funciona' porque el código que divide las cadenas de consulta y el uri original usa todos los delimitadores para la coincidencia: 1) la primera consulta se divide en '?' luego 2) la cadena de consulta se analiza usando una lista de coincidencias que incluye '?' (solo conveniencia) ... Esto podría estar ocurriendo ya en bibliotecas de análisis ubicuas.

+0

explique sus votos bajos, por favor. – Rondo

Cuestiones relacionadas