web-dev-qa-db-fra.com

Est-ce que l'ordre des en-têtes dans une réponse HTTP est important?

Est-il toujours utile de savoir si l'ordre des en-têtes est

A: 1
B: 2

contre

B:2
A:1

J'essaie de savoir si je peux utiliser un dictionnaire pour stocker une liste d'en-têtes ou s'il doit s'agir d'une sorte de liste ou de dictionnaire commandé.

57
Josh Gibson

Non, peu importe les en-têtes portant des noms différents. Voir RFC 2616 , section 4.2:

L'ordre dans lequel les champs d'en-tête avec des noms de champs différents sont Reçus n'est pas significatif. Cependant, il est de "bonne pratique" d'envoyer d'abord Les champs d'en-tête généraux, suivis des champs d'en-tête de requête ou de réponse - , Et de se terminer par les champs d'en-tête d'entité.

Cependant, il est important pour plusieurs en-têtes du même nom:

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 [ie , # (valeurs)]. Il DOIT être possible de combiner les champs d’en-tête multiples en une paire "nom de champ: champ-valeur", sans modifier la sémantique de , en ajoutant chaque valeur de champ suivante à la première, chaque séparé par une virgule. L'ordre dans lequel les champs d'en-tête avec le même nom de champ Est reçu est donc important pour l'interprétation De la valeur du champ combiné, et un proxy NE DOIT donc PAS Modifier l'ordre. de ces valeurs de champ lorsqu'un message est transféré.

62
Adam Rosenfield

L'ordre des en-têtes ne devrait pas avoir d'importance. Il peut y avoir des implémentations "plus faibles" de la norme HTTP où l'ordre a de l'importance, mais cela ne devrait pas en général.

Voici un lien qui décrit les en-têtes HTTP:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

7
Andy White

Les en-têtes HTTP sont indépendants les uns des autres et vous pouvez utiliser un dictionnaire pour les stocker sans vous soucier de leur ordre.

2
Kirtan

Cela peut également être important de spécifier plusieurs fois set-cookie pour le même cookie:

"Set-Cookie: COOKIE1=VALUE1; ...
"Set-Cookie: COOKIE1=VALUE2; ...

Dans ce cas, COOKIE1 sera défini sur VALUE2 et, si l'ordre est modifié:

"Set-Cookie: COOKIE1=VALUE2; ...
"Set-Cookie: COOKIE1=VALUE1; ...

COOKIE1 sera défini sur VALUE1

1
eLRuLL

RFC 7230, section 3.2.2: Field Order répond spécifiquement à cette question. Les citations ici proviennent de cette section de la spécification, avec une emphase ajoutée par moi:

L'ordre dans lequel les champs d'en-tête avec des noms de champs différents sont reçus est non significatif .

Nous allons ensuite qualifier cela par une note sur les bonnes pratiques au nom de la performance:

Toutefois, il est recommandé d’envoyer d’abord les champs d’en-tête contenant des données de contrôle, tels que Hôte pour les demandes et Date pour les réponses, afin que les implémentations puissent décider quand ne pas traiter un message le plus tôt possible.

Dans certains cas, un message peut contenir plusieurs champs d’en-tête portant le même nom. Dans ce cas, l'ordre compte.

Un destinataire PEUT combiner plusieurs champs d'en-tête avec le même nom de champ en une paire "nom de champ: valeur de champ", sans modifier la sémantique du message, en ajoutant chaque valeur de champ suivante à la valeur de champ combiné dans l'ordre, séparées par un virgule. L'ordre dans lequel les champs d'en-tête avec le même nom de champ sont reçus est donc significatif pour l'interprétation de la valeur du champ combiné.

0
Chris Martin