Quelle est la différence entre les paramètres d'URL et les chaînes de requête?

91

Je ne vois pas beaucoup de différence entre les paramètres et les chaînes de requête, dans l'URL. Alors, quelle est la différence et quand faut-il utiliser l'un par rapport à l'autre?

Konst
la source
1
Avez-vous un contexte, car pour autant que je sache, les deux sont généralement utilisés pour la même chose - mais votre cas peut être spécifique au contexte.
Allan S. Hansen
Je n'ai pas de contexte spécifique, c'est une question générale. Dans quel cas devrais-je utiliser une manière plutôt qu'une autre. Il doit y avoir des utilisations différentes de ces deux.
Konst
Personnellement - j'utilise principalement le mot paramètre lorsque je les aborde dans un contexte d'appel de variable ou de méthode, et une chaîne de requête lorsque je parle d'eux dans le contexte d'URL. (par exemple: la chaîne de requête est divisée en paramètres pour la méthode). Mais ce n'est que du langage donc le contexte et les situations diffèrent et je doute que quiconque vous traque pour avoir utilisé l'un ou l'autre lorsque vous en avez envie :).
Allan S. Hansen

Réponses:

84

Le composant de requête est indiqué par le premier ?dans un URI. "Chaîne de requête" peut être un synonyme (ce terme n'est pas utilisé dans la norme URI).

Quelques exemples d'URI HTTP avec des composants de requête:

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

( liste des caractères autorisés dans le composant de requête )

Le "format" du composant de requête appartient aux auteurs de l'URI. Une convention courante ( mais rien de plus qu'une convention, en ce qui concerne la norme URI ¹) est d'utiliser le composant de requête pour les paires clé-valeur, aka. paramètres , comme dans le dernier exemple ci - dessus: bar1=a&bar2=b.

De tels paramètres pourraient également apparaître dans les autres composants URI, c'est-à-dire le chemin² et le fragment. En ce qui concerne la norme URI, c'est à vous de décider quel composant et quel format utiliser.

Exemple d'URI avec des paramètres dans le chemin, la requête et le fragment:

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

¹ La norme URI dit à propos du composant de requête :

[…] Les composants de requête sont souvent utilisés pour transporter des informations d'identification sous la forme de paires «clé = valeur» […]

² La norme URI dit à propos du composant de chemin :

[…] Les caractères réservés point-virgule (";") et égal ("=") sont souvent utilisés pour délimiter les paramètres et les valeurs de paramètre applicables à ce segment. Le caractère réservé virgule (",") est souvent utilisé à des fins similaires.

unor
la source
1
Le paramètre et la requête sont différents. Voir les sections 3.3 et 3.4 dans tools.ietf.org/html/rfc2396.html
cowlinator
@cowlinator: (RFC 2396 est obsolète, mais la norme actuelle, RFC 3986, dit quelque chose de similaire à propos des paramètres dans le composant de chemin ). Je n'ai pas dit qu'ils sont les mêmes, n'est-ce pas? Les auteurs d'URI pourraient spécifier des paramètres dans le composant de requête (comme décrit dans ma réponse), et ils pourraient également spécifier des paramètres dans le composant de chemin (comme décrit dans votre référence) - dans les deux cas, il s'agit simplement d'une convention, rien que la norme ne définit. - Souhaitez-vous suggérer une modification de ma réponse? Pensez-vous que OP signifiait des paramètres dans le chemin?
unor
30

Les paramètres sont des paires clé-valeur qui peuvent apparaître dans le chemin de l'URL et commencer par un caractère point-virgule ( ;).

La chaîne de requête apparaît après le chemin (le cas échéant) et commence par un caractère de point d'interrogation ( ?).

Les paramètres et la chaîne de requête contiennent des paires clé-valeur.

Dans une GETrequête, les paramètres apparaissent dans l'URL elle-même:

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

Dans une POSTrequête, les paramètres peuvent apparaître dans l'URL elle-même, mais également dans le flux de données (appelé contenu).

La chaîne de requête fait toujours partie de l'URL.

Les paramètres peuvent être enterrés dans le form-dataflux de données lors de l'utilisation de la méthode POST afin qu'ils n'apparaissent pas dans l'URL. Oui, une POSTrequête peut définir des paramètres en tant que données de formulaire et dans l'URL, et cela n'est pas incohérent car les paramètres peuvent avoir plusieurs valeurs.

Je n'ai trouvé aucune explication pour ce comportement jusqu'à présent. Je suppose qu'il peut être utile parfois de "montrer" les paramètres d'une POSTrequête, ou même de laisser le code gérant une GETrequête partager certaines parties avec le code gérant un POST. Bien sûr, cela ne peut fonctionner qu'avec le code serveur prenant en charge les paramètres dans une URL.

Jusqu'à ce que vous obteniez de meilleures informations, je vous suggère d'utiliser les paramètres uniquement dans le form-dataflux de données des POSTdemandes.

Sources:

Ce que chaque développeur doit savoir sur les URL

RFC 3986

Laurent Caillette
la source