Pregunta

¿Cómo puedo encontrar la solicitud http que recibió mi python cgi? Necesito diferentes comportamientos para HEAD y GET.

¡Gracias!

¿Fue útil?

Solución

import os

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

Otros consejos

Esta no es una respuesta directa a su pregunta. Pero su pregunta proviene de hacer las cosas de manera incorrecta.

No escriba scripts Python CGI.

Escriba una aplicación mod_wsgi . Mejor aún, use un marco web Python. Hay docenas Elija uno como Werkzeug .

El estándar WSGI (descrito en PEP 333 ) lo hace mucho más , mucho más fácil de 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 propio script CGI o aplicación mod_wsgi.

¿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 está destinada a devolver exactamente los mismos encabezados que GET. La única diferencia es que no habrá contenido de respuesta. El hecho de que no haya contenido de respuesta no significa que ya no tenga que devolver un encabezado válido de longitud de contenido u otros encabezados, que dependen del contenido de respuesta.

En mod_wsgi, que varias personas le están señalando, en realidad cambiará deliberadamente el método de solicitud de HEAD a GET en ciertos casos para protegerse de las personas que tratan mal a HEAD de manera diferente. El caso específico donde se hace esto es donde se registra un filtro de salida de 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 encabezados 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 coincidir 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 los scripts CGI detrás de Apache, ya que los filtros de salida todavía pueden agregarse en ese caso también. Para los scripts CGI, no hay nada en el lugar para protegerse contra los usuarios que son estúpidos y hacen cosas diferentes para una solicitud HEAD.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top