12
votes

Détecter le type de requête HTTP (obtenir, la tête, etc.) d'un CGI Python

Comment puis-je trouver la requête HTTP mon Python CGI reçu? J'ai besoin de comportements différents pour la tête et obtenez.

merci!


2 commentaires

Pourquoi n'utilisez-vous pas mod_wsgi?


Parce que je ne sais pas ce que c'est. O :-)


3 Réponses :


17
votes
import os

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

0 commentaires

0
votes

Ce n'est pas une réponse directe à votre question. Mais votre question découle de faire des choses dans le mauvais sens.

N'écrivez pas les scripts de Python CGI.

Écrivez un Application MOD_WSGI . Mieux encore, utilisez un cadre Web Python. Il y a des dizaines. Choisissez-en une comme WERKZEUG .

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

La mise en œuvre mod_wsgi est plus rapide et plus sécurisée qu'un CGI.

Un cadre Web est également plus simple que de rédiger votre propre script CGI ou application MOD_WSGI.


1 commentaires

Je vais regarder dans mod_wsgi, mais c'est juste une solution temporaire, car nous allons bientôt passer à Dango.



0
votes

Pourquoi avez-vous besoin de distinction entre vous et la tête?

Normalement, vous ne devriez pas distinguer et traiter une demande de tête comme un get. En effet, une demande de tête est destiné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. Juste parce qu'il n'y a pas de contenu de réponse, mais cela ne signifie pas que vous ne devez plus retourner un en-tête de contenu de contenu valide, ni d'autres en-têtes, qui dépendent du contenu de la réponse.

dans mod_wsgi, que diverses personnes vous indiquent, il changera délibérément la méthode de la demande de la tête pour obtenir dans certains cas pour protéger les personnes qui traitent à tort la tête différemment. Le cas spécifique où cela est fait est l'inscription d'un filtre de sortie Apache. La raison pour laquelle elle est faite dans ce cas 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 vous soucier de générer de contenu de réponse pour une demande de tête, vous priverez le filtre de sortie du contenu et les en-têtes qu'ils ajoutent peuvent alors ne pas être d'accord avec ce qui serait renvoyé à partir d'une demande d'obtention. Le résultat final de ceci est que vous pouvez gêner les caches et le fonctionnement du navigateur.

La même chose peut s'appliquer de manière égale aux scripts CGI derrière Apache lorsque les filtres de sortie peuvent toujours être ajoutés dans ce cas. Pour les scripts CGI, il n'y a rien en place cependant pour protéger contre les utilisateurs étant stupides et faire des choses différemment pour une demande de tête.


2 commentaires

Certains dames de liaison valides accèdent à une ressource sur mon site avec une méthode de tête. Ils sont inoffensifs. OTOH, un bottes de Gazillion est ddoge mon site avec accès à la même ressource. C'est pourquoi j'ai besoin de dire la différence.


Si vous obtenez des demandes que vous ne voulez pas, vous devriez peut-être essayer de le bloquer sur le serveur en consultant la chaîne d'agent à l'aide du module de réécriture ou d'un autre module qui permet l'inspection des en-têtes. Pourquoi est-il toujours nécessaire de passer au script CGI?