Domanda

Come posso scoprire la richiesta http ricevuta dal mio python cgi? Ho bisogno di comportamenti diversi per HEAD e GET.

Grazie!

È stato utile?

Soluzione

import os

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

Altri suggerimenti

Questa non è una risposta diretta alla tua domanda. Ma la tua domanda deriva dal fare le cose nel modo sbagliato.

Non scrivere script CGI Python.

Scrivi un'applicazione mod_wsgi . Meglio ancora, usa un framework web Python. Ce ne sono dozzine. Scegli uno come Werkzeug .

Lo standard WSGI (descritto in PEP 333 ) lo rende molto , molto più facile trovare cose nella richiesta web.

L'implementazione di mod_wsgi è più veloce e più sicura di un CGI.

Un framework Web è anche più semplice della scrittura del proprio script CGI o dell'applicazione mod_wsgi.

Perché è necessario distinguere tra GET e HEAD?

Normalmente non dovresti distinguere e trattare una richiesta HEAD proprio come un GET. Questo perché una richiesta HEAD ha lo scopo di restituire esattamente le stesse intestazioni di un GET. L'unica differenza è che non ci saranno contenuti di risposta. Solo perché non è presente alcun contenuto di risposta, ciò non significa che non è più necessario restituire un'intestazione valida per la lunghezza del contenuto o altre intestazioni che dipendono dal contenuto della risposta.

In mod_wsgi, a cui diverse persone ti stanno indicando, in realtà cambierà deliberatamente il metodo di richiesta da HEAD a GET in alcuni casi per proteggersi da persone che trattano erroneamente HEAD in modo diverso. Il caso specifico in cui ciò viene fatto è dove è registrato un filtro di output Apache. La ragione per cui viene eseguita in questo caso è perché il filtro di output potrebbe aspettarsi di vedere il contenuto della risposta e da ciò generare ulteriori intestazioni di risposta. Se decidessi di non preoccuparti di generare alcun contenuto di risposta per una richiesta HEAD, priverai il filtro di output del contenuto e le intestazioni che aggiungono potrebbero non essere d'accordo con ciò che verrebbe restituito da una richiesta GET. Il risultato finale di questo è che puoi riempire le cache e il funzionamento del browser.

Lo stesso può valere per gli script CGI dietro ad Apache, dato che in quel caso è ancora possibile aggiungere filtri di output. Per gli script CGI non c'è nulla in atto per proteggere dagli utenti che sono stupidi e fanno le cose in modo diverso per una richiesta HEAD.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top