предварительно сжатый gzip break на chrome, почему? - PullRequest
4 голосов
/ 08 июня 2009

Я размещаю предварительно сжатые файлы CSS и JS на своем сайте, а также IE6-8 и FF отлично работает с моим файлом .htaccess.

# Compressed files
RewriteCond %{HTTP:Accept-Encoding} .*gzip.*
AddEncoding x-gzip .gz
AddType application/x-javascript .gz
AddType text/css .gz

Я уже вызываю файлы с расширением .gz [пример]:

<link rel="stylesheet" type="text/css" media="all" href="css/layout.css.gz" />

Так почему же это ломается в Google Chrome?

Спасибо.

Ответы [ 7 ]

3 голосов
/ 08 июня 2009

Скачать Fiddler и посмотреть на необработанные заголовки ответа, чтобы увидеть, что сервер отправляет обратно для этого конкретного запроса.

К вашему сведению, Fiddler - это прокси на стороне клиента, который фильтрует запросы вашего браузера. Супер информативный при решении подобных вопросов.

- Обновление

После дальнейшего расследования не похоже, что ваш RewriteCond действительно делает то, что вы думаете, он делает. Согласно Документации , директива RewriteCond используется только в сочетании с RewriteRule.

3 голосов
/ 09 апреля 2012

Safari (и Google Chrome) не работают со сжатыми файлами, если их расширение .gz

Для поддержки архивов gzip в Safari и Chrome скопируйте и сожмите файлы .css и .js в gzip и переименуйте расширение .gz в .jgz (например: before - один файл style.css в каталог после - два файла, style.css и style.css.jgz в каталог)

И добавил этот код в ваш файл .htaccess:

AddEncoding gzip .jgz
RewriteCond %{HTTP:Accept-encoding} gzip
# RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{HTTP_USER_AGENT} !Konqueror
RewriteCond %{REQUEST_FILENAME}.jgz -f
RewriteRule ^(.*)$ $1.jgz [QSA,L]

<IfModule mod_headers.c>
    Header append Vary User-Agent
    <FilesMatch .*\.js.jgz$>
    ForceType text/javascript
    Header append Vary Accept-Encoding
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
    <FilesMatch .*\.css.jgz$>
    ForceType text/css
    Header append Vary Accept-Encoding  
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
</IfModule>

Например megaburg.ru Протестировано - работает с Safari, Chrome, Opera и Firefox 8)

2 голосов
/ 26 июня 2009

Наш файл .htaccess (у нас есть файлы .jsz со сжатым JavaScript, и Chrome прекрасно с ними справляется):

AddEncoding gzip .jsz
AddType text/javascript .jsz
2 голосов
/ 26 июня 2009
  1. Вы должны использовать заголовок ответа Content-Encoding: gzip.
  2. Вы должны возвращать сжатый контент GZIP только тогда, когда заголовок Accept-Encoding клиента позволяет GZIP .
1 голос
/ 08 августа 2009

Я ответил на аналогичный вопрос с гораздо более консервативным правилом сопоставления, когда Gzip:

Safari, Chrome и IE6 имеют проблемы с Gzip-загрузками. Также, Apache сделает сжатие gzip для вас нет необходимости вручную GZIP файлы. Попробуйте этот фрагмент:

# This uses mod_deflate, which is pretty standard on Apache 2.  Loading
# mod_deflate looks like this:
#
#   LoadModule deflate_module modules/mod_deflate.so
#
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \\bMSIE !no-gzip !gzip-only-text/html

См. Исходное сообщение: Как я могу сделать так, чтобы мой файл .htaccess позволял Safari и другим браузерам открывать GZIP?

0 голосов
/ 16 июня 2009

Вам просто нужно установить поле заголовка Content-Encoding, чтобы сообщить клиенту, что данные ответа кодируются gzip:

<FilesMatch "\.gz$">
    Header set Content-Encoding gzip
</FilesMatch>

Но, к сожалению, Apache не позволяет установить это поле заголовка. Вместо этого Content-Encoding станет X-Content-Encoding.

0 голосов
/ 08 июня 2009

Google Chrome (и Apple Safari) не поддерживают сжатые gzip CSS и JavaScript. Некоторые версии IE6 также имеют проблемы. Они поддерживают сжатые gzip HTML-документы, но не CSS и JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...