В Safari для OSX, iOS и Windows возникают проблемы с распаковкой содержимого Gzip на моем сервере после недавнего капитального ремонта сервера.
Я перешел с 1 сервера с Apache и PHP5-FPM на 3 сервера. Балансировщик нагрузки и два сервера с HHVM, использующие Nginx.
Я не могу определить, что вызывает проблему с декомпрессией. Это происходит последовательно в одних и тех же документах, но непоследовательно на всем веб-сайте.
Этот поток загружается нормально.
https://kiwifar.ms/threads/sun-tzus-the-art-of-war.11304/
В этой ветке нет.
https://kiwifar.ms/threads/andrew-dobson-aka-tom-preston.1933/page-590
Вместо этого я получаю в Safari контент, который выглядит следующим образом.
����z�H�6xl]E6�//S�.j�Ey��]���r�����H�$J �@-]����%̥͕���@)R�$چ�,a�-22222ތÿ<����^�Q4v����p���?l���%�Zް]�����%�w�v����%�s�0l�>L�����_B����vp�������ہx��v������ݵ���{n� ���W;��^���bd��|&�����!=@j�{��-���; ��Gܫ�Q���?�V� �:�]�v�)&�Ж�8�^�p�m�FQ4yX����UV����I�珫�Zm�:���¶�G[[[w]�*F�=h��ձu��{���(�&tCi���3;��vu�ҬԪ�0L=��|�%�n�R%ÑmG%QE��b(��2�}�͚8!������q/��'���G
это только происходит в Safari.
Хром? Работает. Гугл Хром? Работает. IE10? Работает. Mozilla? Работает. Опера? Работает. IceWeasle? Работает. Android Chrome? Работает. Браузер Dolphin? Работает.
Я включил отладку в Safari. Вот заголовки ответов.
Safari для Windows
Cache-Control:private, max-age=0
CF-RAY:20f2a2c627ff22ac-LAX
Connection:keep-alive
Content-Encoding:gzip, gzip
Content-Type:text/html; charset=UTF-8
Date:Sat, 01 Aug 2015 15:39:27 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Server:cloudflare-nginx
Transfer-Encoding:Identity
Vary:Accept-Encoding, Accept-Encoding
X-Frame-Options:SAMEORIGIN
X-Powered-By:HHVM/3.8.1
Для контраста, вот Chromium, который работает.
Хром (Рабочий)
cache-control:private, max-age=0
cf-ray:20f2a3b04a8d13c5-LAX
content-encoding:gzip
content-encoding:gzip
content-type:text/html; charset=UTF-8
date:Sat, 01 Aug 2015 15:40:05 GMT
expires:Thu, 19 Nov 1981 08:52:00 GMT
server:cloudflare-nginx
status:200 OK
vary:Accept-Encoding
vary:Accept-Encoding
version:HTTP/1.1
x-frame-options:SAMEORIGIN
x-powered-by:HHVM/3.8.1
Это точно такой же документ. Единственная разница заключается в том, что Safari отправляет "keep-alive", которого нет в Chromium. Может поэтому он никогда не разжимается? Он никогда не перестает ждать новых файлов gzip?
Конфигурация Nginx для Gzip. Это касается всех трех серверов (как балансировщика нагрузки, так и узлов).
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 32 8k;
gzip_http_version 1.1;
gzip_types text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
proxy_buffering off;
Кроме того, вот конфигурация загрузки.
upstream fruitbasket {
server lime:443 weight=10;
server lemon:443 weight=3;
}
Я пробовал все мыслимые конфигурации, чтобы исправить это, но ничего не помогло.
Изменить 1: просмотрев заголовки ответов всех других браузеров, Keep-Alive
Я упомянул, что не нашел ни в одном из них.
Изменить 2: я могу подтвердить, что проблема Content-Encoding:gzip, gzip
. Любая страница с одним gzip
нагрузки. Safari не знает, что делать с этим типом кодировки.
Моя проблема была конкретной. XenForo предлагает автоматический gzip как параметр конфигурации на уровне приложения. Если у вас возникла эта проблема, убедитесь, что ваше приложение также не выполняет сжатие, прежде чем достигнет вашего сервера.