2010-10-17 85 views
3

我正在开发一个网站,我正在使用gzip.exe预先压缩css和js文件(它只有一个css文件,从4.53 KB到1.50 KB,以及一个包含jquery和一些脚本的js文件从72.8 KB变为24.7 KB)Safari不接受gzip内容?

这些文件是style.gz和js.gz并作为静态文件。

问题是,他们不适用于Safari(v5.0.2)而不是css既不是js。

做工精细,这些浏览器:

火狐3.6.10 /谷歌浏览器6.0.4 .../IE 8的x64 /绒面3.0.6 /傲游2.5.15 .../Avant浏览器2010

他们都做工精细,除了Safari浏览器

我使用Windows 7 64位系统

回答

3

你应该得到服务器给gzip他们 - 这可以在htaccess文件来完成和工作得很好。

+0

是的,我已经知道,但我想预先压缩它们,因为它们是静态的,并且可能会消耗一些服务器资源以用于共享Web主机。 – medk 2010-10-17 22:06:22

+1

够公平 - 但我怀疑你不会注意到这个区别。 – 2010-10-17 22:26:47

+0

跳回来:我相当肯定我读了一个地方,一旦“初始gziping”已完成,它被保存在服务器的内存中。所以未来的请求来自那里,而不是每次都重新生成。再加上沉重的缓存和长期过期的标题 - 你真的不应该注意。 PS。你应该使用“deflate”而不是gzip,如果你的服务器允许的话,因为它更高效。 – 2010-10-20 12:54:54

1

有解决这个问题的方法。基本上,你需要改用.jgz。广州作为扩展JavaScript文件:

Fix for .gz and Safari

+0

谢谢迈克尔。对于jgz它现在可以工作,但是css还没有工作。即使使用.jgz或.cssgz – medk 2010-10-17 22:00:07

2

+1 Rob说什么。

你在做什么是不应该工作的黑客,所以当它失败时你不能抱怨。提供gzip资源与使用Content-Encoding标头为不同类型的资源提供服务时完全不同,因此可以在网络上对其进行压缩。

对于不懂gzip的用户代理,服务预压缩文件显然也会失败。 HTTP标准提供了一种协商此机制的机制:Accept-EncodingContent-Encoding。除非您以完全符合标准的方式重新实施该机制(并且迈克尔的链接中的文章并非开始才能获得该权利),否则您会阻止客户端。

这是没有必要的。 Gzip速度很快,服务器通常会缓存静态内容的压缩版本,因此您无法通过尝试再次猜测它。 HTTP压缩是Web服务器核心竞争力的一部分,让Web服务器完成其工作并单独离开gzip。

+0

感谢您的回复bobince。您可能有权利,但您是否认为压缩100 KB的大文件可能会消耗一些资源,尤其是在共享托管计划上可能会引起注意?并且您确定压缩的js或css文件将被缓存并一遍又一遍地重复传输,而不会在每次请求页面时重新压缩? – medk 2010-10-18 00:22:22