¿Cuál es la diferencia entre los parámetros de URL y las cadenas de consulta?

90

No veo mucha diferencia entre los parámetros y las cadenas de consulta en la URL. Entonces, ¿cuál es la diferencia y cuándo se debe usar uno sobre el otro?

Konst
fuente
1
¿Tiene un contexto, porque hasta donde yo sé, los dos generalmente se usan para lo mismo, pero su caso podría ser específico del contexto?
Allan S. Hansen
No tengo un contexto específico, es una pregunta general. ¿En qué caso debería usar una forma en lugar de la otra? Debe haber diferentes usos de esos dos.
Konst
Personalmente, utilizo principalmente la palabra parámetro cuando me refiero a ellos en un contexto de llamada de variable o método, y la cadena de consulta cuando hablo de ellos en el contexto de la URL. (por ejemplo: la cadena de consulta se divide en parámetros para el método). Pero es solo lenguaje, por lo que el contexto y las situaciones difieren y dudo que alguien te persiga por usar cualquiera de los dos cuando "te apetece" :).
Allan S. Hansen

Respuestas:

84

El componente de consulta se indica con el primero ?en un URI. "Cadena de consulta" puede ser un sinónimo (este término no se utiliza en el estándar URI).

Algunos ejemplos de HTTP URI con componentes de consulta:

http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b

( lista de caracteres permitidos en el componente de consulta )

El "formato" del componente de consulta depende de los autores de la URI. Una convención común ( pero nada más que una convención, en lo que respecta al estándar URI ¹) es usar el componente de consulta para pares clave-valor, también conocido como. parámetros , como en el último ejemplo anterior: bar1=a&bar2=b.

Estos parámetros también podrían aparecer en los otros componentes de URI, es decir, la ruta² y el fragmento. En lo que respecta al estándar URI, depende de usted qué componente y qué formato usar.

URI de ejemplo con parámetros en la ruta, la consulta y el fragmento:

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹ El estándar URI dice sobre el componente de consulta :

[…] Los componentes de la consulta se utilizan a menudo para llevar información de identificación en forma de pares "clave = valor" […]

² El estándar URI dice sobre el componente de ruta :

[…] El punto y coma (";") y los caracteres reservados igual ("=") se utilizan a menudo para delimitar parámetros y valores de parámetros aplicables a ese segmento. El carácter reservado de coma (",") se utiliza a menudo para propósitos similares.

unor
fuente
1
El parámetro y la consulta son diferentes. Consulte las secciones 3.3 y 3.4 en tools.ietf.org/html/rfc2396.html
cowlinator
@cowlinator: (RFC 2396 es obsoleto, pero el estándar actual, RFC 3986, dice algo similar sobre los parámetros en el componente de ruta ). No dije que fueran iguales, ¿o sí? Los autores de URI podrían especificar parámetros en el componente de consulta (como se describe en mi respuesta), y también podrían especificar parámetros en el componente de ruta (como se describe en su referencia); en ambos casos es solo una convención, nada de lo que define el estándar. - ¿Sugeriría un cambio a mi respuesta? ¿Crees que OP significaba parámetros en la ruta?
unor
30

Los parámetros son pares clave-valor que pueden aparecer dentro de la ruta de URL y comienzan con un carácter de punto y coma ( ;).

La cadena de consulta aparece después de la ruta (si la hay) y comienza con un signo de interrogación ( ?).

Tanto los parámetros como la cadena de consulta contienen pares clave-valor.

En una GETsolicitud, los parámetros aparecen en la propia URL:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

En una POSTsolicitud, los parámetros pueden aparecer en la propia URL, pero también en el flujo de datos (conocido como contenido).

La cadena de consulta siempre forma parte de la URL.

Los parámetros se pueden enterrar en el form-dataflujo de datos cuando se usa el método POST, por lo que es posible que no aparezcan en la URL. Sí, una POSTsolicitud puede definir parámetros como datos de formulario y en la URL, y esto no es inconsistente porque los parámetros pueden tener varios valores.

Hasta ahora no he encontrado una explicación para este comportamiento. Supongo que a veces puede ser útil "mostrar" los parámetros de una POSTsolicitud, o incluso dejar que el código que maneja una GETsolicitud comparta algunas partes con el código que maneja a POST. Por supuesto, esto solo puede funcionar con parámetros de soporte de código de servidor en una URL.

Hasta que obtenga mejores conocimientos, le sugiero que utilice parámetros solo en el form-dataflujo de datos de las POSTsolicitudes.

Fuentes:

Lo que todo desarrollador debe saber sobre las URL

RFC 3986

Laurent Caillette
fuente