Je serais vraiment reconnaissant de l'aide pour comprendre ce comportement d'Apache.
Je communique avec PHP depuis une application iPhone Objective-C en application/json. La compression Gzip est activée sur le serveur et demandée par le client.
Depuis mon fichier .htaccess :
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
Pour les petites requêtes, Apache définit l'en-tête 'Content-Length'. Par exemple (ces valeurs sont affichées en Objective-C depuis l'en-tête) :
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 est un en-tête que j'ajoute correspondant à la taille de la chaîne JSON non compressée.
Comme vous pouvez le voir, cette requête est très petite (217 octets).
Voici les en-têtes d'une requête plus grande (282888 octets) :
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;
Remarquez que Content-Length n'est pas indiqué.
Mes questions :
- Pourquoi Apache ne transmet-il pas le Content-Length pour la requête plus grande ?
- Est-ce que le fait que 'Content-Encoding=gzip' soit défini signifie que la compression gzip fonctionne toujours sur la requête plus grande, même si je ne peux pas vérifier la différence de taille ?
- Existe-t-il un moyen pour que Apache inclue le Content-Length réel pour ces requêtes plus importantes afin de reporter de manière plus précise l'utilisation des données aux utilisateurs ?
Cette application peut être utilisée avec des forfaits de données coûteux, d'où mon désir de rapporter l'utilisation réelle à l'utilisateur, et non une utilisation gonflée de 30 à 70 % (quelques centaines de Ko supplémentaires peuvent ne pas sembler beaucoup - mais ces forfaits peuvent coûter entre 1 et 10 dollars par Mo !).
Merci d'avance.