当 Content-Encoding 为 gzip、gzip 时,Safari 不会解压缩 gzip 内容

当 Content-Encoding 为 gzip、gzip 时,Safari 不会解压缩 gzip 内容

最近进行服务器大修后,适用于 OSX、iOS 和 Windows 的 Safari 在解压缩我的服务器上的 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 中。

Chromium?可以。Google Chrome?可以。IE10?可以。Mozilla?可以。Opera?可以。IceWeasle?可以。Android Chrome?可以。Dolphin Browser?可以。

我已在 Safari 中启用了调试。以下是响应标头。

适用于 Windows 的 Safari

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 不知道如何处理这种编码类型。

答案1

我的问题比较具体。XenForo 以自动 gzip 作为应用程序级配置选项。如果您遇到此问题,请确保您的应用程序在到达服务器之前不会也进行 gzip 压缩。

https://xenforo.com/help/config-php-options/

相关内容