为什么 Safari 不接受 GZIP 压缩?

问题描述 投票:0回答:3

我这里有一个相当大的 JavaScript 文件,我想将其嵌入到我的网站中。 HTTP 服务器足够智能,可以在将文件传送到浏览器之前对其进行 GZIP。不过,我用 Google Chrome 和 Safari 进行了测试。在 Chrome 上,它运行得很好。 400K 压缩至 100k 左右 但是 在 Safari 上压缩不起作用。有趣的是,内容编码正确设置为“gzip”。


更新:我已经阅读了 Safari 中的一个 GZIP-Bug,其中文件不能以“.gz”结尾,否则 Safari 不会接受 GZIP。由于我的文件不是以 .gz 结尾,所以这个问题不应该成为问题。

http safari gzip
3个回答
10
投票

我在尝试优化 iOS7 Safari 移动 iPad 上网站的加载时间时也遇到了这个问题。

  • 编码=未压缩的文件大小,来自服务器
  • 解码=本地未压缩的文件大小
  • 已传输 = 未压缩文件大小 + 发送和接收的标头
  • Content-Length = 从服务器发送的压缩文件

Safari 选择了一种非常奇怪的方式在调试器中表示这些数字。


7
投票

发送到 Safari 的 HTTP 标头表示它已压缩(它具有 Content-Encoding: gzip 标头,并且表示 Content-Length 为 119406 字节) - 我更相信这些,而不是 Web Inspector 中显示的粗体数字 430.61 。我不知道它是如何确定顶栏中的这两个数字的。

如果使用wireshark嗅探HTTP请求,您可以验证网络上传输了多少字节。


2
投票

这是不久前的事,但我刚刚遇到了一个非常相似的问题,或者可能是这个问题的根源。当您使用 gzip for safari 压缩数据时,如下所示:

gzip jquery.min.js

您最终会得到一个 jquery.min.js.gz ,即使正确指定为 gzip 编码文件流,并且重命名为 jquery.jgz ,它也会在 Safari 中失败,正如许多其他关于此问题的线程中提到的那样。这似乎是因为文件名被编码在 gzip 文件中。

如果您像这样编码 gzip 文件:

cat jquery.min.js | gzip > jquery.jgz

然后您将得到一个小几个字节的文件,并且可以在 Safari 中完美运行。

© www.soinside.com 2019 - 2024. All rights reserved.