Question

Comment puis-je connaître la requête http reçue par mon python cgi? J'ai besoin de comportements différents pour HEAD et GET.

Merci!

Était-ce utile?

La solution

import os

if os.environ['REQUEST_METHOD'] == 'GET':
    # blah

Autres conseils

Ceci n’est pas une réponse directe à votre question. Mais votre question découle d’une mauvaise façon de faire les choses.

N'écrivez pas de scripts CGI Python.

Ecrivez une application mod_wsgi . Mieux encore, utilisez un framework web Python. Il y en a des dizaines. Choisissez-en un comme Werkzeug .

La norme WSGI (décrite dans le PEP 333 ) en fait beaucoup , beaucoup plus facile de trouver des choses dans la demande Web.

L'implémentation de mod_wsgi est plus rapide et plus sécurisée qu'un CGI.

Un framework Web est également plus simple que d’écrire votre propre script CGI ou votre application mod_wsgi.

Pourquoi avez-vous besoin de faire la distinction entre GET et HEAD?

Normalement, vous ne devriez pas distinguer et traiter une requête HEAD comme un GET. Cela est dû au fait qu'une demande HEAD est censée renvoyer exactement les mêmes en-têtes qu'un GET. La seule différence est qu'il n'y aura pas de contenu de réponse. Ce n’est pas parce qu’il n’ya pas de contenu de réponse que vous n’aurez plus à renvoyer un en-tête Content-Length valide ou d’autres en-têtes, qui dépendent du contenu de la réponse.

Dans mod_wsgi, que plusieurs personnes vous désignent, cela changera délibérément la méthode de requête de HEAD à GET dans certains cas pour vous protéger contre les personnes qui traitent mal HEAD différemment. Le cas spécifique où cela est fait est où un filtre de sortie Apache est enregistré. Dans ce cas, la raison est que le filtre de sortie peut s'attendre à voir le contenu de la réponse et à partir de celui-ci générer des en-têtes de réponse supplémentaires. Si vous décidez de ne pas créer le contenu de la réponse pour une demande HEAD, vous priverez le filtre de sortie du contenu et les en-têtes qu'ils ajoutent risquent de ne pas correspondre à ce qui serait renvoyé par une demande GET. Le résultat final est que vous pouvez remplir les caches et le fonctionnement du navigateur.

Il en va de même pour les scripts CGI derrière Apache, car des filtres de sortie peuvent également être ajoutés dans ce cas également. Pour les scripts CGI, rien ne protège toutefois contre la stupidité des utilisateurs qui agissent différemment pour une demande HEAD.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top