Comment wsgi gère-t-il plusieurs en-têtes de requête portant le même nom?
Question
Dans l'en-tête WSGI, les en-têtes sont représentés dans l'environnement sous la forme de valeurs 'HTTP_XXX'. Par exemple, l'en-tête Cookie:
est stocké dans la clé HTTP_COOKIE
de l'environnement.
Comment plusieurs en-têtes de requête portant le même nom d'en-tête sont-ils représentés?
La solution
Plusieurs cookies sont combinés dans un seul en-tête, séparés par des points-virgules.
Plusieurs en-têtes sont autorisés par la spécification HTTP , mais uniquement pour certains types d’en-têtes, et il est toujours possible de combiner ces en-têtes en un seul (à l’aide de virgules, et non de points-virgules)
Autres conseils
Je pensais que la réponse à cette question serait triviale, mais après en avoir creusé un peu, je n'en suis pas si sûr.
Voici ce que j'ai trouvé jusqu'à présent:
Le WSGI PEP-333 ( http://www.python.org/ dev / peps / pep-0333 / ) suggère que les variables d’environnement doivent contenir tout ce que dit la spécification CGI.
La spécification CGI (de plus en plus difficile à trouver, beaucoup de liens brisés, le mieux que je puisse trouver à draft-coar-cgi-v11-03 ) parle de métadonnées et dit (section 6.1.5)
" ;. Si plusieurs champs d’en-tête avec le même nom de champ sont reçus alors le le serveur DOIT les réécrire comme si ils avaient été reçus comme un seul champ d'en-tête ayant la même sémantique avant d'être représenté dans un metavariable "
Ce qui me suggère que si vous avez plusieurs lignes d'en-tête avec la même clé, vous devez les réunir d'une manière ou d'une autre sur une seule ligne.
HTTP_COOKIE, à titre d'exemple, prend en charge cette fonctionnalité en concaténant toutes les paires clé = valeur en une seule ligne avec des points-virgules entre elles.