Как программно проверить, включено ли сжатие http на веб-сервере?

Я хочу проверить, включено ли сжатие http на веб-сервере и включено ли конкретное сжатие (например, Gzip, Deflate, Compress)?

Или, если я запрашиваю данные через объект WebClient в .net, установив для Accept-Encoding значение «gzip, deflate», как я могу узнать, сжаты ли полученные данные перед их обработкой?

Ответов (3)

Решение

Чтобы проверить кодировку тела ответа, вы должны проверить заголовок HTTP-ответа: Content-Encoding.

Серверу разрешено использовать только те кодировки, которые указаны в заголовке запроса accept-encoding. Если сервер не может дать ответ, используя одну из указанных кодировок accept, он должен ответить 406 (неприемлемо).

Пример запроса:

GET / HTTP/1.1
Host: www.brianbondy.com
Accept-Encoding: gzip,deflate

Пример ответа:

HTTP/1.1 200 OK
Date: Thu, 04 Dec 2003 16:15:12 GMT
Server: Apache/2.0
Content-Encoding: gzip
Content-Length: 1533

Другие примеры Accept-Encoding:

 Accept-Encoding: compress, gzip
 Accept-Encoding:
 Accept-Encoding: *
 Accept-Encoding: compress;q=0.5, gzip;q=1.0
 Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

Как точно ЗНАТЬ, какие кодировки доступны на сервере:

Невозможно точно узнать, какие кодировки доступны на уровне сервера, потому что некоторые серверы могут поддерживать определенные кодировки только для определенных типов файлов.

Это означает, что лучшее, что вы можете сделать, это ответить на вопрос: доступна ли для файла, указанного в первой строке запроса, конкретная кодировка? Вы можете ответить на это, явно отказавшись от кодировки содержимого идентификатора и указав также кодировку, о которой вы хотите знать.

Accept-Encoding: gzip, identity;q=0

Источник примеров, HTTP RFC

Из спецификации HTTP :

4. Кодирование содержимого "identity" всегда приемлемо, если специально не отказано, потому что поле Accept-Encoding включает "identity; q = 0", или потому, что поле включает "*; q = 0" и не включает явно "identity" контент-кодирование. Если значение поля Accept-Encoding пусто, то допустима только "идентификационная" кодировка.

Поэтому, если вы установили, Accept-Encoding: identity;q=0, gzip, deflate вы заставляете сервер сжимать его или возвращаете 406 (неприемлемо).

Это может помочь.

http://www.whatsmyip.org/http_compression/