2012-04-15 12 views
10

¿Cómo puedo calcular la longitud del contenido, por ejemplo, de:Calcular la longitud del contenido de POST

POST /Upload/ HTTP/1.1 
Host: test.lan 
User-Agent: Shockwave Flash 
Connection: Keep-Alive 
Cache-Control: no-cache 
Accept: text/* 
Content-Length: ????? 
Content-Type: multipart/form-data; boundary=----------------------------4d2179e6b3c0 

------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Filename" 

phpinfo.php 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="ASPSESSID" 

6e223eb1c7561e9c599f03cc04e9444b 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Filedata"; filename="phpinfo.php" 
Content-Type: application/octet-stream 

<? phpinfo(); ?> 
------------------------------4d2179e6b3c0 
Content-Disposition: form-data; name="Upload" 

Submit Query 
------------------------------4d2179e6b3c0-- 

Respuesta

16

El valor Content-Length debe calcularse mediante la suma de todos los datos después de la terminación de las cabeceras de los mensajes. En el caso de tu ejemplo, esto es todo lo que después de este punto (con CRLF caracteres incluidos para facilitar la lectura):

... 
Content-Length: ?????\r\n 
Content-Type: multipart/form-data; boundary=--------------------4d2179e6b3c0\r\n 
\r\n 

todo lo que viene después de la primera línea vacía (\r\n) - incluyendo los delimitadores de contorno - se deben contar en la longitud total. En la práctica, esto generalmente significa que tendrá que tabular el valor del encabezado Content-Length después de generar el cuerpo completo de la entidad del mensaje. Una vez que tenga el cuerpo completo del mensaje, puede anteponerlo a sus encabezados para crear el mensaje HTTP completo.

De acuerdo con la especificación HTTP no es técnicamente requerido para especificar el encabezado Content-Length. De RFC 2616 14.13:

aplicaciones deben utilizar este campo para indicar la transferencia de la longitud del cuerpo del mensaje, a menos que esté prohibido por las normas de la sección 4.4.

Sin embargo, esto es un requisito bastante estándar para la mayoría de los servidores que generalmente enviar de vuelta una respuesta de error si el Content-Length falta o se ha especificado incorrectamente.

+0

Sí, según HTTP no es un requisito obligatorio, pero algunas implementaciones CGI requieren una longitud de contenido en todas las transacciones POST. – ViFI

Cuestiones relacionadas