Gradirei davvero un po 'di aiuto per comprendere questo comportamento di Apache.
Sto comunicando a PHP da un'app iPhone Objective-C in application / json. La compressione gzip è abilitata sul server e richiesta dal client.
Dal mio .htaccess:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
Per piccole richieste, Apache sta impostando l'intestazione "Content-Length". Ad esempio (questi valori vengono emessi in Objective-C dall'intestazione):
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 185; <-------------
"Content-Type" = "application/json";
Date = "Wed, 22 Sep 2010 12:20:27 GMT";
"Keep-Alive" = "timeout=3, max=149";
Server = Apache;
Vary = "Accept-Encoding";
"X-Powered-By" = "PHP/5.2.13";
"X-Uncompressed-Content-Length" = 217;
X-Uncompressed-Content-Length è un'intestazione che sto aggiungendo impostata sulla dimensione della stringa JSON non compressa.
Come puoi vedere, questa richiesta è molto piccola (217 byte).
Ecco le intestazioni di una richiesta più ampia (282888 byte):
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Type" = "application/json";
Date = "Wed, 22 Sep 2010 12:20:29 GMT";
"Keep-Alive" = "timeout=3, max=148";
Server = Apache;
"Transfer-Encoding" = Identity;
Vary = "Accept-Encoding";
"X-Powered-By" = "PHP/5.2.13";
"X-Uncompressed-Content-Length" = 282888;
Si noti che la lunghezza del contenuto non viene fornita.
Le mie domande:
- Perché Apache non invia Content-Length per la richiesta più grande?
- Il fatto che 'Contend-Encoding = gzip' sia impostato significa che la compressione gzip funziona ancora sulla richiesta più grande, anche se non riesco a verificare la differenza di dimensioni?
- Esiste un modo per convincere Apache a includere l'effettiva lunghezza del contenuto per queste richieste più grandi per segnalare in modo più accurato l'utilizzo dei dati agli utenti?
Questa app può essere utilizzata su piani dati che sono costosi, quindi il mio desiderio di segnalare all'utente l'effettivo utilizzo, non un uso gonfiato del 30-70% (alcune centinaia di KB in più potrebbero non sembrare molto - ma questi piani possono costare tra $ 1 e $ 10 per MB!).
Grazie in anticipo.