Назад | Перейти на главную страницу

Content-Encoding не отображается в заголовке ответа, если Accept-Encoding имеет значение gzip или deflate

Я использую 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, используя эти правила,

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html