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

DEFLATE не работает в IE9

Я разместил это при переполнении стека, но было высказано предположение, что здесь мне может повезти больше:

Раньше я не использовал deflate для кодирования веб-страниц, так что это новая область для меня, но когда я смотрю на новый трафик в ff, мой файл all.js теперь составляет 117 КБ из 427 КБ, так что, похоже, он работает здесь. Но в IE9 изменений нет. В моем заголовке ответа указано Content-Encoding: gzip в FF, но не в IE9.

вот мой .htaccess:

<ifModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

Заголовок запроса для all.js в IE9:

   Key  Value
Request GET /all.js HTTP/1.1
Accept  application/javascript, */*;q=0.8
Referer http://www.alexchapman.co.uk/
Accept-Language en-GB
User-Agent  Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding gzip, deflate
Host    static.alexchapman.co.uk
Connection  Keep-Alive
Cache-Control   no-cache

Заголовок ответа для all.js в IE9:

Key Value
Response    HTTP/1.1 200 OK
Date    Tue, 28 Feb 2012 15:53:41 GMT
Server  Apache/2
Last-Modified   Tue, 28 Feb 2012 15:53:40 GMT
Accept-Ranges   bytes
Cache-Control   private
Expires Fri, 02 Mar 2012 03:53:41 GMT
Keep-Alive  timeout=15, max=100
Connection  Keep-Alive
Transfer-Encoding   chunked
Content-Type    text/javascript

Заголовок запроса для all.js в Firefox:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-gb,en;q=0.5
Cache-Control: no-cache
Connection: keep-alive
Cookie: DELETED - this should not be sent and isnt sent with IE
Host: static.alexchapman.co.uk
Pragma: no-cache
Referer: http://www.alexchapman.co.uk/
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2

Заголовок ответа для all.js в Firefox:

Accept-Ranges: bytes
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/javascript
Date: Tue, 28 Feb 2012 15:55:26 GMT
Expires: Fri, 02 Mar 2012 03:55:26 GMT
Keep-Alive: timeout=15, max=100
Last-Modified: Tue, 28 Feb 2012 15:55:26 GMT
Server: Apache/2
Transfer-Encoding: chunked
Vary: Accept-Encoding

Чтобы было ясно, это происходит не только с all.js - я использовал это в качестве примера, поскольку это самый большой файл, который выиграет от сжатия. Будем очень признательны за любые предложения относительно того, что я делаю неправильно.

**********ОБНОВИТЬ************

Мой хостинг-провайдер вернулся ко мне и сказал, что они могут подтвердить, что gzip и deflate включены и работают на моем сайте, они сказали, что проблема с Internet Explorer специфична для этого браузера, поэтому я рекомендую попробовать режим совместимости, поскольку это не вызвано нашими серверами.

Я знаю представление о совместимости в IE, и это должно помочь правильно отображать старые сайты, поэтому я не знаю, о чем они здесь говорят, и могу подтвердить, что это не влияет на сжатие файлов.

Мне кажется, я понял, что здесь происходит. Я скачал Wireshark и через него проверил сетевой трафик. Я боролся с этим, но я думаю, что теперь у меня есть - было бы здорово, если бы кто-нибудь мог подтвердить, что я сделал это правильно.

Глядя на файл all.js в качестве примера, я следил за потоком tcp для запроса в firefox и IE9. Оба заявили, что использовали шифрование gzip. Интересно, что общий объем разговора был другим. Ie9 - 268471 байт FF-120812 байт (оба меньше, чем несжатый файл).

Это примерно правильный размер файла, указанный в firebug. Но это половина размера файла, указанного в инструментах разработчика IE. Таким образом, похоже, что IE не только хуже работает с gzip, но и инструмент разработчика неверно сообщает, что он даже хуже, чем есть на самом деле. Если кто-нибудь сможет проверить этот результат или предложить объяснение, я приму их ответ.

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

Кроме того, остерегайтесь комбинации кодирования MSIE + TLS + gzip + chunked transfer, есть некоторые ошибки, например: https://support.microsoft.com/kb/871205

Не «ответ» как таковой, но mod_gzip отлично работает для меня (IE9 тоже). Моя конфигурация:

<IfModule gzip_module>
    mod_gzip_on Yes

    mod_gzip_item_include mime text/.*
    mod_gzip_item_include mime application/xm.*
    mod_gzip_item_include mime application/javascript
    mod_gzip_item_include mime image/svg.*

    mod_gzip_dechunk Yes
</IfModule>

Deflate и GZip - это почти одно и то же, gzip технически медленнее, хотя на современных компьютерах разницу можно спокойно игнорировать на стороне клиента и на стороне сервера, если вы кэшируете ответы (что невозможно для динамически генерируемых страниц).