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

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 una vez más?

El componente de consulta está indicado por el primero ? en un URI. “Cadena de consulta” podría ser un sinónimo (este término no se utiliza en el estándar URI).

Algunos ejemplos de URI HTTP 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 URI. Una convención común ( pero nada más que una convención, en lo que se refiere 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 .

Tales 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.

Ejemplo de URI 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 consulta a menudo se usan para llevar información de identificación en forma de pares “clave = valor” […]

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

[…] los caracteres reservados de punto y coma (“;”) e iguales (“=”) a menudo se utilizan para delimitar parámetros y valores de parámetros aplicables a ese segmento. El carácter reservado de coma (“,”) a menudo se usa para fines similares.

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

La cadena de consulta aparece después de la ruta (si existe) y comienza con un carácter de interrogación ( ? ).

Ambos parámetros y cadena de consulta contienen pares clave-valor.

En una solicitud GET , los parámetros aparecen en la URL misma:

 ://:@:/;?# 

En una solicitud POST , 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 flujo de form-data cuando se utiliza el método POST, por lo que es posible que no aparezcan en la URL. Sí, una solicitud POST 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 explicación para este comportamiento. Supongo que a veces puede ser útil “mostrar” los parámetros de una solicitud POST , o incluso dejar que el código que maneja una solicitud GET comparta algunas partes con el código que maneja una POST . Por supuesto, esto solo puede funcionar con los parámetros de soporte del código del servidor en una URL.

Hasta que obtenga mejores conocimientos, le sugiero que use parámetros solo en el flujo de datos de form-data de las solicitudes POST .

Fuentes:

Lo que todo desarrollador debe saber sobre las URL

RFC 3986