urls template example url query-string url-parameters

url - template - httpresponse django example



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

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

Algunos ejemplos de URI de 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 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 .

Dichos 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 utilizar.

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

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

Standard 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 de ruta :

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

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 por encima?


Los parámetros son pares clave-valor que pueden aparecer dentro de la ruta URL y comienzan con un 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 solicitud GET , los parámetros aparecen en la propia URL:

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

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 es parte de la URL.

Los parámetros se pueden enterrar en el flujo de form-data datos 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.

No he encontrado ninguna explicación para este comportamiento hasta ahora. Supongo que a veces puede ser útil "mostrar" 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 un POST . Por supuesto, esto solo puede funcionar con el código del servidor que admite parámetros en una URL.

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

Fuentes:

Lo que todo desarrollador debe saber sobre las URL

RFC 3986