In Django versuche ich, die Inhaltslänge der Anfrage und des Antworts zu protokollieren, was genau dem entspricht, was der Django-Server in stderr ausgibt.
%Vor%Also schreibe ich eine einfache Middleware wie folgt, aber der Wert von 'Content-Length' ist immer leer.
%Vor% Ich habe fire-debug überprüft, in den Antwortheadern steht
Gibt es ein Problem der Middleware-Bestellungen?
Wie wäre es mit len(response.content)
? Das würde Ihnen die Anzahl der Zeichen im Inhalt der Antwort geben. Ich denke, das ist nicht unbedingt die gleiche wie die Anzahl der Bytes.
Ich habe durch Fire-Debug überprüft, gibt es "Content-Length" in der Antwortheader Aber es gibt keine Inhaltslänge in der Middleware [...] Gibt es ein Problem der Middleware-Bestellungen?
Ja. Middlewareklassen werden von oben nach unten (in settings.MIDDLEWARE_CLASSES
) bei der Verarbeitung der Anforderung und bei der Verarbeitung der Antwort von unten nach oben angewendet. Wenn Sie in Ihren Middleware-Klassen 'django.middleware.http.ConditionalGetMiddleware'
haben, fügt sie der HttpResponse einen 'Content-Length'
-Header hinzu.
Wenn Sie jedoch Ihre Middleware-Klasse nach 'django.middleware.http.ConditionalGetMiddleware'
in settings.MIDDLEWARE_CLASSES
setzen, wird sie diese zuerst bei der Verarbeitung der Antwort anwenden und anschließend die ConditionalMiddleware
anwenden. Aus diesem Grund sehen Sie in Firebug einen Header Content-Length
, der beim Aufruf der Middleware noch nicht verarbeitet wurde.
Weitere Informationen zu Middleware finden Sie in der Django Middleware-Dokumentation .
Tags und Links django http httpresponse content-length