web-dev-qa-db-fra.com

Définir plusieurs en-têtes HTTP avec le même nom?

Pour autant que je sache, la spécification HTTP autorise la définition de plusieurs en-têtes HTTP avec le même nom. Y a-t-il un cas d'utilisation pour le faire (du client au serveur et vice versa)?

HTTP 1.1 section 4.2 :

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.

Si je ne me trompe pas, il n'y a pas de cas où plusieurs en-têtes avec le même nom sont nécessaires.

51
deamon

Étant donné que les en-têtes en double peuvent causer des problèmes avec divers serveurs Web et API (indépendamment de ce que la spécification dit), je doute qu'il existe un cas d'utilisation à usage général où cela soit la meilleure pratique. Cela ne veut pas dire que quelqu'un quelque part ne le fait pas, bien sûr.

17
heisenberg

Il est couramment utilisé pour Set-Cookie:. De nombreux serveurs définissent plusieurs cookies.

Bien sûr, vous pouvez toujours les définir tous dans un seul en-tête.

En fait, je pense que vous ne pouvez pas définir plusieurs cookies dans un en-tête. C'est donc un cas d'utilisation nécessaire.

Spécification de cookie prétend que vous pouvez combiner plusieurs cookies dans un en-tête de la même manière que d'autres en-têtes peuvent être combinés (séparés par des virgules), mais il souligne également que les syntaxes non conformes (comme le Expires paramètre, qui a ,s dans sa valeur) sont encore courants et doivent être traités par les implémentations.

Donc, si vous utilisez des paramètres Expires dans votre Set-Cookie en-têtes et vous ne voulez pas que tous vos cookies expirent en même temps, vous devez probablement utiliser plusieurs en-têtes.

39
sligocki

Elle n'est autorisée que pour les en-têtes utilisant un format très spécifique, voir RFC 2616, Section 4.2 .

7
Julian Reschke

Comme vous cherchez des cas d'utilisation, peut-être que Accept serait valide.

  • Accepter: application/json
  • Accepter: application/xml
6
André Pena

Vieux fil, mais je me suis penché sur ce même problème. Quoi qu'il en soit, les en-têtes Accept et Accept-Encoding sont des exemples typiques qui utilisent plusieurs valeurs, séparées par des virgules. Même s'il s'agit d'un en-tête spécifique à la demande, les spécifications ne font pas de différence entre la demande et la réponse à ce niveau. Vérifiez celui de cette page. Ce que dit la spécification, c'est que si vous avez des virgules comme caractère dans la valeur de l'en-tête, vous ne pouvez pas utiliser plusieurs en-têtes du même nom, sauf si vous désambiguïsez l'utilisation de la virgule.

0
massiAng