2009-09-13 23 views

Respuesta

14
import os 

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

Esto no es una respuesta directa a su pregunta. Pero tu pregunta surge de hacer las cosas mal.

No escriba scripts Python CGI.

Escriba una solicitud mod_wsgi. Mejor aún, usa un framework web de Python. Hay docenas. Elija uno como Werkzeug.

El estándar WSGI (descrito en PEP 333) hace que sea mucho, mucho más fácil encontrar cosas en la solicitud web.

La implementación de mod_wsgi es más rápida y segura que un CGI.

Un marco web también es más simple que escribir su propia secuencia de comandos CGI o mod_wsgi.

+0

Voy a investigar mod_wsgi, pero esta es solo una solución temporal, ya que nos moveremos a Dango pronto. – cfischer

0

¿Por qué necesita distinguir entre GET y HEAD?

Normalmente, no debe distinguir y debe tratar una solicitud HEAD como un GET. Esto se debe a que una solicitud HEAD debe devolver exactamente los mismos encabezados que un GET. La única diferencia es que no habrá contenido de respuesta. Sin embargo, el hecho de que no haya contenido de respuesta no significa que ya no tenga que devolver un encabezado Content-Length válido ni otros encabezados, que dependen del contenido de la respuesta.

En mod_wsgi, que varias personas lo señalan, en realidad cambiará deliberadamente el método de solicitud de HEAD a GET en ciertos casos para protegerse contra personas que tratan incorrectamente a HEAD de manera diferente. El caso específico donde se realiza esto es cuando se registra un filtro de salida Apache. La razón por la que se hace en este caso es porque el filtro de salida puede esperar ver el contenido de la respuesta y generar cabeceras de respuesta adicionales. Si decidiera no molestarse en generar ningún contenido de respuesta para una solicitud HEAD, privará al filtro de salida del contenido y los encabezados que agreguen pueden no estar de acuerdo con lo que se devolvería de una solicitud GET. El resultado final de esto es que puede rellenar cachés y el funcionamiento del navegador.

Lo mismo puede aplicarse igualmente para las secuencias de comandos CGI detrás de Apache ya que los filtros de salida también se pueden agregar en ese caso también. Sin embargo, para los scripts CGI no hay nada establecido para evitar que los usuarios sean estúpidos y hacer las cosas de manera diferente para una solicitud HEAD.

+0

Algunos correctores de enlaces válidos acceden a un recurso en mi sitio con un método HEAD. Ellos son inofensivos. OTOH, un montón de bots están ddosing mi sitio con GET accede al mismo recurso. Es por eso que necesito ver la diferencia. – cfischer

+0

Si recibe solicitudes que no desea, quizás deba intentar bloquearlas en el servidor mirando la cadena del agente utilizando el módulo de reescritura u otro módulo que permita la inspección de encabezados. ¿Por qué todavía necesita ir a la secuencia de comandos CGI? –

Cuestiones relacionadas