Byłbym bardzo wdzięczny za pomoc w zrozumieniu tego zachowania Apache.
Komunikuję się z PHP z aplikacji iPhone Objective-C w aplikacji / json. Kompresja Gzip jest włączona na serwerze i żądana przez klienta.
Z mojego .htaccess:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
W przypadku małych żądań Apache ustawia nagłówek „Content-Length”. Na przykład (te wartości są wyprowadzane w celu C z nagłówka):
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 to nagłówek, który dodaję do rozmiaru nieskompresowanego ciągu JSON.
Jak widać, to żądanie jest bardzo małe (217 bajtów).
Oto nagłówki z większego żądania (282888 bajtów):
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;
Zauważ, że długość treści nie jest podana.
Moje pytania:
- Dlaczego Apache nie wysyła Content-Length dla większego żądania?
- Czy fakt, że ustawiono „Contend-Encoding = gzip”, oznacza, że kompresja gzip nadal działa w przypadku większego żądania, mimo że nie mogę zweryfikować różnicy wielkości?
- Czy istnieje sposób, w jaki mogę skłonić Apache do uwzględnienia faktycznej długości treści w przypadku tych większych żądań, aby dokładniej zgłaszać wykorzystanie danych użytkownikom?
Tej aplikacji można używać w przypadku planów danych, które są drogie, dlatego pragnę zgłosić użytkownikowi rzeczywiste użycie, a nie 30-70% zawyżone zużycie (kilkaset dodatkowych KB może nie brzmieć dużo - ale te plany mogą kosztować od 1 USD i 10 USD za MB!).
Z góry dziękuję.