Il y a quelques mois, j'ai eu un problème avec un en-tête HTTP personnalisé nommé "SESSION_ID", non transféré par le proxy nginx.
On m'a dit que les traits de soulignement sont interdits selon la RFC du protocole HTTP.
Google, j'ai trouvé que la plupart des serveurs comme Apache ou nginx les définissent comme illégaux.
RFC2616 la section 4.2 dit
suivre le même format générique que celui donné dans la section 3.1 de la RFC 822 [9]
et RFC822 dit
Le nom de champ doit être composé de caractères ASCII imprimables (c'est-à-dire des caractères dont la valeur est comprise entre 33 et 126., décimal, sauf deux-points))
le trait de soulignement est de 95 décimales dans la table ASCII (appartient à la plage 33-126). Qu'est-ce qui me manque?
Ils ne sont pas interdits. C'est l'héritage de CGI. ici
Si vous ne définissez pas explicitement
underscores_in_headers on;
, nginx supprimera silencieusement les en-têtes HTTP avec des traits de soulignement (qui sont parfaitement valides selon la norme HTTP). Ceci est fait afin d'éviter les ambiguïtés lors du mappage des en-têtes aux variables CGI, car les tirets et les traits de soulignement sont mappés aux traits de soulignement au cours de ce processus.
Les traits de soulignement dans les champs d'en-tête sont autorisés ( RFC 7230, sec. 3.2. ), mais en fait rares.