2009-12-30 17 views
8

Estoy recibiendo peticiones HEAD en mi solicitud, y se preguntaba sobre la mejor manera de manejarlos. Las opciones son:Las mejores prácticas para el manejo de petición HTTP HEAD con Django en App Engine

  • convertirlos en Obtiene, proceso GET normalmente, entonces:.
    • pele el cuerpo (aunque no estoy seguro de cómo - response.content = '' no parece hacerlo
    • se parece auto-Strips motor de aplicación el cuerpo, dando una advertencia "Dejar caer cuerpo inesperado en respuesta a la petición HEAD"

parece que esta es limpio, y se puede escribir muy bien con nosotros decoradores o middleware.

  • manejar cada petición HEAD especialmente:
    • esto significa que podía evitar un almacén de datos de acceso en algunos (muchos?) De los casos.
    • Existe el riesgo, al parecer, que el middleware que establece se evitará la cabecera Content-longitud de hacerlo por este enfoque.

Algo más? ¿Qué debería hacer? ¿El uso de App Engine hace una diferencia aquí? ¿Hay detalles sutiles? si es así, ¿hay middleware apropiado para usar? Para convertir a GET, se `request.method = "GET" suficiente (que parece que funciona)?

Respuesta

10

¿tenía intención de que la aplicación para manejar peticiones HEAD, o vienen éstos de alguna fuente anónima? Ciertamente no está obligado a cumplir con una solicitud HEAD. Usted puede simplemente volver con un código de estado de 405 (Método no permitido) y proporcionar la cabecera Permitir con GET o lo que significas para manejar.

No creo que request.method configurar manualmente para obtener es significativa; con toda probabilidad, se acaba de devolver una respuesta que es mayor que lo que el solicitante deseaba. Solo querían ver los encabezados de la respuesta. Si no desea manejar el HEAD, realice el enfoque del encabezado 405 y Allow.

Generalmente, un cliente envía una petición HEAD, ya que están tratando de ser inteligentes acerca de no manejar una respuesta completa si no se necesitan. Ellos están comprobando para ver si el Content-Length ha cambiado desde la última vez que vieron a la respuesta, o que quieren ver de la última modificación o Expira cabecera.

Sin duda, es de buen comportamiento para su aplicación para manejar con gracia peticiones HEAD, pero no tiene que hacerlo.

+1

* Django automáticamente quitará el contenido de las respuestas a las solicitudes HEAD sin dejar los encabezados, para que pueda manejar las solicitudes HEAD exactamente como las solicitudes GET en sus vistas. * A partir de la revisión [16115] (http: //code.djangoproject .com/conjunto de cambios/16115) Django contiene práctico [require_safe] decorador (http://docs.djangoproject.com/en/dev/topics/http/decorators/#django.views.decorators.http.require_safe), que restringe las solicitudes GET y HEAD. –

+1

También tenga en cuenta, que petición HEAD está totalmente procesada por una función de vista (e incluso requet.GET se rellenará). La única diferencia parece ser en vacío 'response.content'. –

Cuestiones relacionadas