web-dev-qa-db-fra.com

Standard pour ajouter plusieurs valeurs d'un seul en-tête HTTP à une demande ou une réponse

Si je veux ajouter une liste de valeurs en tant qu'en-tête HTTP, existe-t-il un moyen standard de le faire? Je n'ai rien trouvé (que je pourrais facilement comprendre) dans RFC 822. Par exemple, les valeurs séparées par des virgules sont-elles des valeurs standard ou séparées par des points-virgules. Existe-t-il une norme?

Exemple:

Key: value1;value2;value3
58
jconlin

Vous voudrez jeter un oeil à la spécification HTTP RFC 2616 où il est dit:

Plusieurs champs d'en-tête de message avec le même nom de champ PEUVENT être présents dans un message si et seulement si la valeur de champ entière pour ce champ d'en-tête est définie comme une liste séparée par des virgules [c'est-à-dire # (valeurs)]. Il DOIT être possible de combiner les multiples champs d'en-tête en une seule paire "nom de champ: valeur de champ", sans changer la sémantique du message, en ajoutant chaque valeur de champ suivante à la première, chacune séparée par une virgule. L'ordre dans lequel les champs d'en-tête portant le même nom de champ sont reçus est donc important pour l'interprétation de la valeur de champ combinée, et donc un mandataire NE DOIT PAS changer l'ordre de ces valeurs de champ lorsqu'un message est transmis.

Cela signifie que vous pouvez envoyer le même en-tête plusieurs fois dans une réponse avec des valeurs différentes, tant que ces valeurs peuvent être ajoutées les unes aux autres à l'aide d'une virgule. Cela signifie également que vous pouvez envoyer plusieurs valeurs dans un seul en-tête en les concaténant avec des virgules.

Donc dans votre cas ce sera:

Key: value1,value2,value3
86
Marc Novakowski

par tous les moyens @ marc-novakowski vous rétrécissant le "problème" :)

normalement (selon les spécifications HTTP), nous délimitons chaque valeur des autres à l'aide d'une virgule ','

mais nous allons examiner un cas simple:

Cookie-set: language=pl; expires=Sat, 15-Jul-2017 23:58:22 GMT; path=/; domain=x.com   
Cookie-set: id=123 expires=Sat, 15-Jul-2017 23:58:22 GMT; path=/; domain=x.com; httponly   

comment joindre de tels en-têtes lorsque les valeurs les unes des autres sont délimitées par des virgules - cas où le coma peut apparaître ???

alors la responsabilité du "client" est de choisir et décider de la stratégie par exemple drop, merg (if merg how)?

jetez un œil à l'implémentation de Mozilla de nsHttpHeaderArray

https://github.com/bnoordhuis/mozilla-central/blob/master/netwerk/protocol/http/nsHttpHeaderArray.h#L185

mozilla choisit d'utiliser un délimiteur de nouvelle ligne '\ n' dans ce cas (pour certains noms de champs d'en-tête)

J'encourage lorsque vous êtes confronté à une telle situation à rechercher des solutions existantes communes - car elles fournissent un schéma familier

7
ceph3us

Cependant, toutes les valeurs avec le même nom de champ ne peuvent pas être combinées dans la liste des valeurs de champ. Par exemple, dans RFC 72 nous pouvons lire

Remarque: En pratique, le champ d'en-tête "Set-Cookie" ([RFC6265]) apparaît souvent plusieurs fois dans un message de réponse et n'utilise pas la syntaxe de liste, ce qui viole les exigences ci-dessus sur plusieurs champs d'en-tête portant le même nom. Puisqu'il ne peut pas être combiné en une seule valeur de champ, les destinataires doivent traiter "Set-Cookie" comme un cas spécial lors du traitement des champs d'en-tête. (Voir l'annexe A.2.3 de [Kri2001] pour plus de détails.)

4
MarianD