web-dev-qa-db-fra.com

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

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 l'utiliser par-dessus?

58
Konst

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 d'URI. Une convention courante ( mais rien de plus qu'une convention, en ce qui concerne le standard URI ¹) consiste à 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 d'URI, c'est-à-dire le chemin² et le fragment. En ce qui concerne la norme URI, c'est à vous de choisir 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 en point-virgule (";") et égaux ("=") 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.

53
unor

Les paramètres sont des paires clé-valeur pouvant apparaître dans le chemin d'URL et commençant par un point-virgule (;).

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

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

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

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

Dans une requête POST, 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 form-data datastream lors de l'utilisation de la méthode POST, de sorte qu'ils peuvent ne pas apparaître dans l'URL. Oui, une requête POST peut définir des paramètres sous forme de données de formulaire et dans l'URL, ce qui n'est pas incohérent car les paramètres peuvent avoir plusieurs valeurs.

Je n'ai trouvé aucune explication à ce comportement jusqu'à présent. J'imagine qu'il peut parfois être utile de "révéler" les paramètres d'une requête POST, ou même de laisser le code manipuler une requête GET partager certaines parties avec le code manipulant un POST. Bien entendu, cela ne peut fonctionner qu'avec du code serveur prenant en charge des paramètres dans une URL.

Jusqu'à ce que vous obteniez de meilleures informations, je vous suggère d'utiliser des paramètres uniquement dans les requêtes form-data datastream of POST.

Sources:

Ce que tout développeur devrait savoir sur les URL

RFC 3986

18
Laurent Caillette