2011-07-05 12 views
9

Klient opublikowania strumień MJPEG jak HTTP POST:Jak powiedzieć Django, aby nie buforował danych HTTP POST?

POST /feed/testfeed HTTP/1.0 
Content-type: multipart/x-mixed-replace; boundary=--myboundary 

--myboundary 
Content-length: 14179 
Content-type: image/jpeg 

....JFIF.... 
.... 

widzę żadnych przychodzących danych w Django w ogóle. request.read(6) zwraca pusty ciąg znaków. Dodaję fałszywy nagłówek "treść-długość":

POST /feed/testfeed HTTP/1.0 
Content-Length: -1 
Content-type: multipart/x-mixed-replace; boundary=--myboundary 

... 

Teraz odczytuje dane z maksymalną prędkością. request.read(6) zwraca (z całymi danymi, a nie tylko oczekiwanymi 6 bajtami) dopiero po przerwaniu połączenia.

To samo zachowanie występuje, gdy używam żądania "PUT" zamiast "POST".

Jak wyłączyć buforowanie żądania POST?

Odpowiedz

1

To trochę domysły (ponieważ nie wyjaśniłeś, jak dokładnie obsługujesz witrynę), ale sądzę, że to nie Django robi buforowanie, ale serwer internetowy przed nim. To, czy można je wyłączyć, czy złagodzić, zależy od serwera, z którego faktycznie korzystasz.

Możesz być zainteresowany z następujących czynności (w przypadku Nginx):

Zasadniczo wydaje się, że z Nginx wyłączenie tego zachowania może nie być możliwe (patrz disable request buffering in nginx). Nie jestem pewien co do innych serwerów, ale jest dużo dyskusji tam, więc używanie google powinno przynieść wiele informacji.

+0

Uwaga: w naszym projekcie przełączyliśmy się na używanie oddzielnej aplikacji (przy użyciu SimpleHTTPServer) do połączeń z treścią. Dzięki temu hacki są niedostępne w witrynie Django/webserver, co upraszcza. –

+0

Pytanie dotyczyło Django. – aaa90210