Я использую Firefox, и когда я устанавливаю Accept-Encoding на «deflate, gzip», я получаю «Content-Encoding: gzip» в заголовке ответа. Когда я использую Accempt-Encoding как deflate или gzip, «Content-Encoding» удаляется из заголовка.
Кто-нибудь может объяснить мне, почему? Есть ли какая-то конфигурация apache, которую мне нужно рассмотреть?
Если вы обслуживаете файл .gz, возможно, вы хотите добавить связь между расширением файла и желаемым типом mime с помощью mod_mime. В конфигурацию VirtualHost можно добавить следующее.
AddEncoding x-gzip .gz
В качестве альтернативы более полный пример для обслуживания предварительно сжатого содержимого включает не только добавление типа кодирования, но также отключение mod_deflate и сброс типа содержимого. В этом примере используется mod_header для добавления типа кодирования.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist
# and the client accepts gzip.
RewriteCond "%{HTTP:Accept-encoding}" "gzip"
RewriteCond "%{DOCUMENT_ROOT}%{REQUEST_FILENAME}\.gz" -s
RewriteRule "^(.*)\.css" "$1\.css\.gz" [QSA]
# Serve gzip compressed JS files if they exist
# and the client accepts gzip.
RewriteCond "%{HTTP:Accept-encoding}" "gzip"
RewriteCond "%{DOCUMENT_ROOT}%{REQUEST_FILENAME}\.gz" -s
RewriteRule "^(.*)\.js" "$1\.js\.gz" [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]
<FilesMatch "(\.js\.gz|\.css\.gz)$">
# Serve correct encoding type.
Header append Content-Encoding gzip
# Force proxies to cache gzipped &
# non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
(Обратите внимание, что приведенное выше добавляет DOCUMENT_ROOT к пути к файлу RewriteCond из указанного образца, поскольку я считаю, что это необходимо при использовании в контексте VirtualHost из 2.2+.)
Обратитесь к RFC, в котором содержится подробная информация о том, какие значения могут использоваться в Accept-Encoding и как сервер проверяет, приемлемо ли кодирование содержимого, в соответствии с полем Accept-Encoding, используя эти правила,