2012-04-15 19 views
10

Come posso calcolare la lunghezza del contenuto, ad esempio di:Calcolare lunghezza del contenuto 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-- 

risposta

16

Il valore Content-Length deve essere calcolato sommando tutti i dati dopo la cessazione delle intestazioni dei messaggi. Nel caso del vostro esempio, questo è tutto quello che dopo questo punto (con CRLF caratteri inclusi per migliorare la leggibilità):

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

Tutto viene dopo la prima riga vuota (\r\n) - inclusi i delimitatori di confine - dovrebbero essere contate nella lunghezza totale. In pratica, questo in genere significa che è necessario tabulare il valore dell'intestazione Content-Length dopo aver generato il corpo dell'entità del messaggio completo. Una volta ottenuto il corpo completo del messaggio, è possibile aggiungerlo alle intestazioni per creare il messaggio HTTP completo.

Secondo le specifiche HTTP che non sono tecnicamente richiesto per specificare l'intestazione Content-Length. Da RFC 2616 14.13:

applicazioni dovrebbero utilizzare questo campo per indicare il trasferimento di lunghezza del corpo del messaggio, a meno che ciò è vietato dalle regole nel paragrafo 4.4.

Tuttavia, questo è un requisito abbastanza standard per maggior parte dei server, che generalmente rispedire una risposta di errore se il Content-Length manca o non correttamente specificato.

+0

Sì, come per HTTP non è un requisito obbligatorio ma alcune implementazioni CGI richiedono una lunghezza del contenuto in tutte le transazioni POST. – ViFI

Problemi correlati