Я был бы очень признателен за понимание этого поведения Apache.
Я общаюсь с PHP из приложения iPhone Objective-C в приложении / JSON. Сжатие Gzip включено на сервере и запрашивается клиентом.
Из моего .htaccess:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
Для небольших запросов Apache устанавливает заголовок «Content-Length». Например (эти значения выводятся в 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-Uncompressed-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;
Обратите внимание, что Content-Length не указан.
Мои вопросы:
- Почему Apache не отправляет Content-Length для большего запроса?
- Означает ли тот факт, что установлено «Contend-Encoding = gzip», что сжатие gzip все еще работает над большим запросом, хотя я не могу проверить разницу в размере?
- Есть ли способ заставить Apache включать фактическую Content-Length для этих больших запросов, чтобы точнее сообщать пользователям об использовании данных?
Это приложение можно использовать на дорогих тарифных планах, поэтому я хочу сообщать пользователю о фактическом использовании, а не об использовании на 30–70% (несколько сотен дополнительных КБ может показаться не таким уж большим, но эти планы могут стоить от 1 доллара). и 10 долларов за МБ!).
Заранее спасибо.