Я дуже вдячний, щоб допомогти зрозуміти цю поведінку Apache.
Я спілкуюся з PHP через додаток iPhone Objective-C у програмі / json. Стиснення Gzip увімкнено на сервері та вимагає клієнт.
З мого .htaccess:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
Для невеликих запитів Apache встановлює заголовок "Довжина вмісту". Наприклад (ці значення виводяться в Objective-C із заголовка):
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-Uncompression-Content-length - заголовок, який я додаю, встановлений до розміру нестисненого рядка JSON.
Як бачите, цього запиту дуже мало (217 байт).
Ось заголовки з більшого запиту (282888 байт):
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;
Зауважте, що довжина вмісту не вказана.
Мої запитання:
- Чому Apache не надсилає довжину вмісту для більшого запиту?
- Чи означає, що встановлено "Contend-Encoding = gzip", що компресія gzip все ще працює на більш великий запит, хоча я не можу перевірити різницю розмірів?
- Чи можна змусити Apache включити фактичну довжину вмісту для цих великих запитів, щоб більш точно повідомити про використання даних користувачам?
Цей додаток можна використовувати в дорогих планах даних, отже, моє бажання повідомити користувача про фактичне використання, а не на 30-70% завищене використання (кілька сотень зайвих КБ можуть здатися не дуже сильними - але ці плани можуть коштувати від 1 долара до $ і 10 доларів за МБ!).
Заздалегідь спасибі.