Bewährte Methode zur Verarbeitung der HTTP HEAD-Anforderung mit Django in App Engine

8

Ich erhalte HEAD-Anfragen in meiner Anwendung und frage mich, wie ich sie am besten behandeln kann. Optionen sind:

  • Konvertiere sie in GETs, verarbeite GET normal, dann:
    • strippe den Körper aus (obwohl ich nicht sicher bin, wie - response.content = '' scheint es nicht zu tun.
    • Es scheint, dass app engine den Körper automatisch ausblendet und eine Warnung gibt "Unerwarteter Körper als Antwort auf die HEAD-Anfrage fallen lassen"

Es scheint, das ist sauber und kann gut mit Dekoratoren oder Middleware geschrieben werden.

  • Behandle jede HEAD-Anfrage speziell:
    • Dies bedeutet, dass ich in einigen (vielen?) Fällen einen DataStore-Zugriff vermeiden konnte.
    • Offensichtlich besteht die Gefahr, dass Middleware, die den Content-length-Header setzt, durch diesen Ansatz daran gehindert wird.

Sonst noch etwas? Was soll ich tun? Macht der Einsatz von App Engine hier einen Unterschied? Gibt es subtile Details? Wenn ja, gibt es eine geeignete Middleware? Um in GET zu konvertieren, ist 'request.method="GET" ausreichend (es scheint zu funktionieren)?

    
Paul Biggar 30.12.2009, 01:24
quelle

1 Antwort

10

Haben Sie vor, dass Ihre Anwendung HEAD-Anfragen bearbeitet, oder stammen diese aus einer anonymen Quelle? Sie sind sicherlich nicht verpflichtet, eine HEAD-Anfrage zu erfüllen. Sie können einfach mit einem Statuscode von 405 (Methode nicht erlaubt) zurückkehren und den Header Allow mit GET angeben oder was immer Sie damit umgehen wollen.

Ich denke nicht, dass das manuelle Setzen von request.method auf GET sinnvoll ist; Wahrscheinlich geben Sie nur eine Antwort zurück, die größer ist als das, was der Anfragende wollte. Sie wollten nur die Header für die Antwort sehen. Wenn Sie den HEAD nicht behandeln möchten, führen Sie den 405- und Allow-Header-Ansatz aus.

Im Allgemeinen sendet ein Client eine HEAD-Anfrage, weil er versucht, schlau zu sein, wenn er eine vollständige Antwort nicht verarbeiten muss, wenn er dies nicht tun muss. Sie überprüfen, ob sich die Inhaltslänge seit dem letzten Auftreten der Antwort geändert hat, oder sie möchten den Header Last-Modified oder Expires sehen.

Es ist sicherlich gut, dass Ihre Anwendung HEAD-Anfragen elegant bearbeitet, aber Sie müssen es nicht.

    
Adam Crossland 30.12.2009, 01:36
quelle