2011-07-05 16 views
9

El cliente es la publicación de flujo MJPEG como HTTP POST:¿Cómo decirle a Django que no almacene en búfer los datos 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.... 
.... 

no veo los datos de entrada en Django en absoluto. request.read(6) devuelve cadena vacía. Agrego el encabezado falso "contenido-longitud":

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

... 

Ahora lee toda la información con la velocidad máxima. request.read(6) regresa (con toda la información, no solo los 6 bytes esperados) solo después de que interrumpo la conexión.

El mismo comportamiento ocurre cuando uso la solicitud "PUT" en lugar de "POST".

Cómo desactivar el almacenamiento en búfer de la solicitud POST?

Respuesta

1

Es un poco difícil de adivinar aquí (porque no explicó cómo está sirviendo el sitio web exactamente), pero creo que no es Django el que hace el almacenamiento en búfer sino un servidor web frente a él. Si esto se puede deshabilitar o mitigar depende del servidor que está usando en realidad.

Usted puede estar interesado en los siguientes (en caso de Nginx):

Básicamente lo que parece, que con Nginx deshabilitar este comportamiento podría no ser posible (ver disable request buffering in nginx). No estoy seguro acerca de otros servidores, pero hay mucha discusión por ahí, por lo que usar Google debería generar mucha información.

+0

Nota: en nuestro proyecto cambiamos a usar aplicaciones separadas (usando SimpleHTTPServer) para conexiones de contenido. Esto mantiene los piratas informáticos lejos del sitio Django/servidor web, simplificando las cosas. –

+0

La pregunta era sobre Django. – aaa90210

Cuestiones relacionadas