Eu realmente aprecio alguma ajuda para entender esse comportamento do Apache.
Estou me comunicando com o PHP a partir de um aplicativo iPhone Objective-C no aplicativo / json. A compactação gzip é ativada no servidor e solicitada pelo cliente.
Do meu .htaccess:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
Para pequenas solicitações, o Apache está configurando o cabeçalho 'Content-Length'. Por exemplo (esses valores são exibidos no Objective-C no cabeçalho):
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 é um cabeçalho que estou adicionando ao tamanho da string JSON descompactada.
Como você pode ver, essa solicitação é muito pequena (217 bytes).
Aqui estão os cabeçalhos de uma solicitação maior (282888 bytes):
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;
Observe que o comprimento do conteúdo não é fornecido.
Minhas perguntas:
- Por que o Apache não envia o comprimento do conteúdo para a solicitação maior?
- O fato de 'Contend-Encoding = gzip' estar definido significa que a compactação gzip ainda está funcionando em uma solicitação maior, mesmo que eu não consiga verificar a diferença de tamanho?
- Existe uma maneira de conseguir que o Apache inclua o comprimento real do conteúdo para essas solicitações maiores para relatar com mais precisão o uso de dados para os usuários?
Este aplicativo pode ser usado em planos de dados caros, portanto, meu desejo de relatar o uso real ao usuário, não 30 a 70% de uso inflado (algumas centenas de KB extras podem não parecer muito - mas esses planos podem custar entre US $ 1 e US $ 10 por MB!).
Desde já, obrigado.