Frage

Wie kann ich die HTTP-Anfrage meines Python cgi erhielt herausfinden? Ich brauche unterschiedliche Verhaltensweisen für HEAD und GET.

Danke!

War es hilfreich?

Lösung

import os

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

Andere Tipps

Dies ist keine direkte Antwort auf Ihre Frage. Aber Ihre Frage ergibt sich aus Dinge in die falsche Art und Weise zu tun.

Schreiben Sie nicht Python CGI-Skripte.

Schreiben Sie eine mod_wsgi Anwendung. Besser noch, verwenden Sie einen Python-Web-Framework. Es gibt Dutzende. Wählen Sie eines wie Werkzeug .

Der WSGI-Standard (beschrieben in PEP 333 ) macht es viel , viel einfacher, die Dinge in der Web-Anfrage zu finden.

Die mod_wsgi Implementierung ist schneller und sicherer als ein CGI.

Ein Web-Framework ist auch einfacher als die eigene CGI-Skript oder mod_wsgi Anwendung zu schreiben.

Warum brauchen Sie zwischen GET und HEAD zu unterscheiden?

Normalerweise sollte man nicht unterscheiden und sollte eine HEAD-Anforderung wie eine GET behandeln. Dies liegt daran, eine HEAD-Anfrage gemeint ist exakt die gleichen Header als GET zurückzukehren. Der einzige Unterschied ist, wird es keine Antwort zufrieden sein. Nur weil es allerdings keine Antwort Inhalt ist, bedeutet nicht, Sie nicht mehr ein gültigen Content-Length-Header zurückgeben müssen, oder andere Header, die auf dem Antwortinhalt abhängig sind.

In mod_wsgi, die verschiedene Menschen, die Sie zeigen auf, wird es tatsächlich absichtlich die Request-Methode von HEAD ändern in bestimmten Fällen GET gegen Menschen zu schützen, die anders HEAD behandeln falsch. Der spezifische Fall, in dem dies geschehen ist, ist, wenn ein Apache-Ausgangsfilter registriert ist. Der Grund, dass es in diesem Fall geschehen ist, ist, weil das Ausgangsfilter erwarten kann den Antwortinhalt zu sehen und daraus generiert zusätzliche Response-Header. Wenn Sie nicht zu stören, zu entscheiden, sind für eine HEAD-Anfrage keine Antwort Inhalte zu generieren, werden Sie die Ausgangsfilter des Inhalts berauben und die Header fügen sie können dann nicht mit einverstanden, was von einer GET-Anfrage zurückgegeben werden würde. Das Endergebnis ist, dass Sie Caches und den Betrieb des Browsers stopfen kann.

Das gleiche gilt gleichermaßen für CGI-Skripten hinter Apache gilt als Ausgangsfilter können nach wie vor auch in diesem Fall hinzugefügt werden. obwohl für CGI-Skripte gibt es nichts an seinem Platz zu schützen gegen Nutzer dumm und Dinge anders für eine HEAD-Anforderung zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top