Ich würde mich sehr über Hilfe beim Verständnis dieses Apache-Verhaltens freuen.
Ich kommuniziere mit PHP über eine iPhone Objective-C-App in application / json. Die Gzip-Komprimierung ist auf dem Server aktiviert und wird vom Client angefordert.
Aus meiner .htaccess:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
Für kleine Anfragen setzt Apache den 'Content-Length'-Header. Zum Beispiel (diese Werte werden in Objective-C aus dem Header ausgegeben):
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 ist ein Header, den ich zur Größe der unkomprimierten JSON-Zeichenfolge hinzufüge.
Wie Sie sehen, ist diese Anforderung sehr klein (217 Byte).
Hier sind die Header einer größeren Anfrage (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;
Beachten Sie, dass die Inhaltslänge nicht angegeben ist.
Meine Fragen:
- Warum sendet Apache die Content-Length für die größere Anfrage nicht?
- Bedeutet die Tatsache, dass 'Contend-Encoding = gzip' gesetzt ist, dass die gzip-Komprimierung immer noch bei der größeren Anforderung funktioniert, obwohl ich den Größenunterschied nicht überprüfen kann?
- Gibt es eine Möglichkeit, Apache dazu zu bringen, die tatsächliche Inhaltslänge für diese größeren Anforderungen anzugeben, um den Benutzern die Datennutzung genauer zu melden?
Diese App kann für Datentarife verwendet werden, die teuer sind. Daher möchte ich dem Benutzer den tatsächlichen Verbrauch melden, nicht 30-70% überhöhten Verbrauch (ein paar hundert zusätzliche KB klingen möglicherweise nicht nach viel - aber diese Tarife können zwischen 1 USD kosten und $ 10 pro MB!).
Danke im Voraus.