152 votes

Position faisant autorité des clés de requête HTTP GET en double

J'ai de la difficulté à trouver des informations fiables sur le comportement avec HTTP chaîne de requête GET champs dupliqués, comme

http://example.com/page?field=foo&field=bar 

et, en particulier, si la commande est maintenue ou non. La plupart des langages orientés produire un tableau contenant à la fois des foo et bar associé à une touche de "champ", mais je voudrais savoir si la déclaration officielle existent (par exemple sur un RFC) sur ce point. RFC 3986 a une section 3.4. Query, qui se réfère à des paires valeur / clé, mais rien n'est dit sur la manière d'interpréter l'ordre et des champs en double et ainsi de suite. Cela a du sens, puisque c'est backend à charge, et non pas dans le champ d'application de cette RFC...

Bien que la norme de facto existe, j'aimerais voir une source faisant autorité, pour lui, juste de la curiosité.

127voto

yfeldblum Points 42613

Il n'y a pas de spécifications à ce sujet. Vous pouvez faire ce que vous aimez.

Les approches typiques incluent: premier donné, dernier donné, un tableau de tous, string-join-with-comma-of-all.

Supposons que la demande brute est:

 GET /blog/posts?tag=ruby&tag=rails HTTP/1.1
Host: example.com
 

Ensuite, il existe différentes options pour ce que request.query['tag'] devrait rapporter, en fonction de la langue ou du cadre:

 request.query['tag'] => 'ruby'
request.query['tag'] => 'rails'
request.query['tag'] => ['ruby', 'rails']
request.query['tag'] => 'ruby,rails'
 

15voto

SimonSimCity Points 1403

Je peux vous confirmer que pour PHP (au moins dans la version 4.4.4 et plus récent) il fonctionne comme ceci :

résultats dans :

Mais

résultats dans :

Ce comportement est le même pour les données GET et POST.

5voto

Photodeus Points 454

La plupart (tous?) de la cadres offrent pas de garanties, de sorte que supposer qu'ils seront retournés dans un ordre aléatoire.

Toujours prendre l'approche la plus sûre.

Par exemple, java HttpServlet interface: ServletRequest.html#getParameterValues

Même les getParameterMap méthode laisse les parler de paramètre d'ordre (l'ordre de java.util.Carte itérateur ne peut pas être invoqué.)

3voto

David Lively Points 16026

En général, les valeurs de paramètre en double comme

entraîner un paramètre queryString unique qui est un tableau :

J’ai vu ce comportement en ASP, ASP.NET et PHP4.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X