Le format des en-têtes HTTP est défini dans la spécification HTTP. Je vais parler de HTTP 1.1, dont la spécification est la suivante RFC 2616 . La section 4.2, "En-têtes de message", définit la structure générale d'un en-tête :
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
field-content = <the OCTETs making up the field-value
and consisting of either *TEXT or combinations
of token, separators, and quoted-string>
Cette définition repose sur deux piliers principaux, le jeton et le TEXTE. Tous deux sont définis à la section 2.2, "Règles de base". Le jeton est :
token = 1*<any CHAR except CTLs or separators>
Il repose à son tour sur le CHAR, le CTL et les séparateurs :
CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
Le texte est :
TEXT = <any OCTET except CTLs,
but including LWS>
Où LWS est l'espace blanc linéaire, dont je ne reproduirai pas la définition, et OCTET est :
OCTET = <any 8-bit sequence of data>
La définition est accompagnée d'une note :
The TEXT rule is only used for descriptive field contents and values
that are not intended to be interpreted by the message parser. Words
of *TEXT MAY contain characters from character sets other than ISO-
8859-1 [22] only when encoded according to the rules of RFC 2047
[14].
Donc, deux conclusions. Tout d'abord, il est clair que l'en-tête nom doit être composé d'un sous-ensemble de caractères ASCII - alphanumériques, quelques signes de ponctuation, pas grand-chose d'autre. Deuxièmement, il n'y a rien dans la définition d'un en-tête valeur qui le limite à l'ASCII ou exclut les caractères 8 bits : il est explicitement composé d'octets, seuls les caractères de contrôle étant interdits (notez que CR et LF sont considérés comme des contrôles). De plus, le commentaire sur la production TEXT implique que les octets doivent être interprétés comme étant en ISO-8859-1, et qu'il existe un mécanisme d'encodage (qui est horrible, soit dit en passant) pour représenter les caractères en dehors de cet encodage.
Ainsi, pour répondre à @BalusC en particulier, il est tout à fait clair que selon la spécification, les valeurs d'en-tête sont en ISO-8859-1. J'ai envoyé des caractères de haut-8859-1 (plus précisément, certaines voyelles accentuées utilisées en français) dans un en-tête de Tomcat, et ils ont été interprétés correctement par Firefox, donc dans une certaine mesure, cela fonctionne aussi bien en pratique qu'en théorie (bien qu'il s'agisse d'un en-tête Location, qui contient une URL, et que ces caractères ne soient pas légaux dans les URL, donc c'était en fait illégal, mais en vertu d'une règle différente !)
Cela dit, je ne compterais pas sur le fait que la norme ISO-8859-1 fonctionne sur tous les serveurs, proxies et clients, et je m'en tiendrais donc à l'ASCII par mesure de précaution.
39 votes
Sachez que les pare-feu peuvent supprimer les champs d'en-tête de réponse. Certains suppriment tout ce qui n'est pas mentionné dans la RFC 2616 (juin 1999, HTTP 1.1). Le côté client devrait toujours être utilisable sans les nouveaux champs.
39 votes
Notez que le commentaire de @stesch ne s'applique pas lorsque l'on utilise HTTP S .
8 votes
Notez que le commentaire de @code_dredd est une légende urbaine. Les pare-feu peuvent filtrer le contenu HTTPS. Voir howtoforge.com/filtration-https-traffic-with-squid y watchguard.com/help/docs/wsm/xtm_11/en-us/content/en-us/
24 votes
@stesch Etant donné que votre article transforme le proxy en quelque chose de similaire à un MiTM (il prend la connexion client cryptée et en crée une nouvelle), alors bien sûr, vous pouvez faire presque n'importe quoi, mais ce fait annule le cryptage du point de vue du proxy car il décrypte le contenu du client lui-même. Dans ce cas, du point de vue du proxy, c'est comme si vous n'utilisiez pas HTTPS en premier lieu...
1 votes
Si quelqu'un est sur le marché universitaire, EzProxy supprimera les en-têtes personnalisés. Vous devez modifier la configuration d'EzProxy pour les autoriser. Ensuite, vous devez espérer que chaque institution membre mette à jour sa configuration EzProxy. EzProxy est le plus souvent utilisé pour l'accès hors campus. Ce qui a été assez populaire ces deux dernières années (pour une raison quelconque /s).