Les en-têtes de réponse HTTP en double sont-ils acceptables?

Je n'ai trouvé aucune spécification indiquant si les en-têtes de réponse HTTP en double sont autorisés par la norme, mais j'ai besoin de savoir si cela causera des problèmes de compatibilité.

Disons que j'ai un en-tête de réponse comme ceci:

HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
Cache-Control: no-cache
Cache-Control: no-store
Location: http://localhost:9876/foo.bar
Content-Language: en-US
Content-Length: 0
Date: Mon, 06 Dec 2010 21:18:26 GMT

Notez qu'il existe deux en-têtes Cache-Control avec des valeurs différentes. Les navigateurs les traitent-ils toujours comme s'ils étaient écrits comme "Cache-Control: no-cache, no-store"?

98
demandé sur Alexis Wilke 2010-12-07 00:54:35

1 réponses

HTTP RFC2616 disponible ici 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 cet en-tête le champ est défini 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 dans un "nom de champ: Valeur de champ", sans modifier la sémantique de la message, en ajoutant chaque champ-valeur suivante à la première, chaque séparer par une virgule. L'ordre dans lequel les champs d'en-tête avec le même le nom de champ reçu est donc significatif pour l'interprétation de la valeur de champ combinée, et donc un proxy ne doit pas modifier l'ordre de ces valeurs de champ lorsqu'un message est transmis

Donc, plusieurs en-têtes avec le même nom sont ok (www-authenticate est un tel cas) si la valeur de champ entière est définie comme une liste de valeurs séparées par des virgules.

Cache-control est documenté ici: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 comme ceci:

Cache-Control   = "Cache-Control" ":" 1#cache-directive

La syntaxe #1cache-directive définit une liste d'au moins un élément de directive cache (voir ici pour la définition formelle de # values: Conventions Notationnelles et grammaire Générique )

Alors, oui,

Cache-Control: no-cache, no-store

Est équivalent à (l'ordre est important)

Cache-Control: no-cache
Cache-Control: no-store
125
répondu Simon Mourier 2013-08-21 21:17:23