Rilevamento del tipo di richiesta http (GET, HEAD, ecc.) Da un cgi python
-
07-07-2019 - |
Domanda
Come posso scoprire la richiesta http ricevuta dal mio python cgi? Ho bisogno di comportamenti diversi per HEAD e GET.
Grazie!
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.