预压缩gzip在chrome上打破,为什么?

时间:2009-06-07 20:12:42

标签: javascript .htaccess gzip google-chrome

我在我的网站上提供预压缩的CSS和JS文件,以及IE6-8和FF 与我的.htaccess文件完美配合。

# Compressed files
RewriteCond %{HTTP:Accept-Encoding} .*gzip.*
AddEncoding x-gzip .gz
AddType application/x-javascript .gz
AddType text/css .gz

我已经调用了扩展名为.gz的文件[example]:

<link rel="stylesheet" type="text/css" media="all" href="css/layout.css.gz" />

那为什么谷歌Chrome会中断呢?

感谢。

7 个答案:

答案 0 :(得分:3)

下载Fiddler并查看原始响应标头,以查看服务器为该特定请求发回的内容。

仅供参考,Fiddler是一个客户端代理,可以过滤您的浏览器请求。处理这类问题时,信息量很大。

- 更新

经过进一步调查,您的RewriteCond似乎并没有按照您的想法行事。根据{{​​3}},RewriteCond指令仅与RewriteRule一起使用。

答案 1 :(得分:3)

如果扩展名为.gz

,则Safari(和Google Chrome)不能使用压缩文件

要在Safari和Chrome上支持gzip存档,请将.css和.js文件复制并压缩到gzip中,并在.jgz上将它们的扩展名重命名为.gz (例如:     之前 - 将一个文件style.css放入目录     之后 - 两个文件,style.css和style.css.jgz到目录中)

并将此代码添加到.htaccess文件中:

AddEncoding gzip .jgz
RewriteCond %{HTTP:Accept-encoding} gzip
# RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{HTTP_USER_AGENT} !Konqueror
RewriteCond %{REQUEST_FILENAME}.jgz -f
RewriteRule ^(.*)$ $1.jgz [QSA,L]

<IfModule mod_headers.c>
    Header append Vary User-Agent
    <FilesMatch .*\.js.jgz$>
    ForceType text/javascript
    Header append Vary Accept-Encoding
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
    <FilesMatch .*\.css.jgz$>
    ForceType text/css
    Header append Vary Accept-Encoding  
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
</IfModule>

例如megaburg.ru 经过测试 - 正在使用Safari,Chrome,Opera和Firefox 8)

答案 2 :(得分:2)

  1. 您必须使用Content-Encoding: gzip回复标题。
  2. 当客户的Accept-Encoding标题允许 GZIP 时,您只能返回GZIP压缩内容。

答案 3 :(得分:2)

我们的.htaccess文件(我们的.jsz文件包含压缩的javascript,Chrome可以很好地处理它们):

AddEncoding gzip .jsz
AddType text/javascript .jsz

答案 4 :(得分:1)

我回答了一个类似的问题,对于什么时候使用Gzip更加保守的匹配规则:

  

Safari,Chrome和IE6都有   Gzipped下载问题。也,   Apache将执行gzip压缩   对你来说,没有必要手动   gzip文件。试试这个片段:

# This uses mod_deflate, which is pretty standard on Apache 2.  Loading
# mod_deflate looks like this:
#
#   LoadModule deflate_module modules/mod_deflate.so
#
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \\bMSIE !no-gzip !gzip-only-text/html

查看原始帖子:How can I make my .htaccess file allow Safari & other browsers to open GZIP?

答案 5 :(得分:0)

您只需要设置Content-Encoding标头字段来告诉客户端,响应数据是用gzip编码的:

<FilesMatch "\.gz$">
    Header set Content-Encoding gzip
</FilesMatch>

但不幸的是Apache不允许设置头字段。相反,Content-Encoding将成为X-Content-Encoding

答案 6 :(得分:-2)

Google Chrome(和Apple Safari)不支持gzip压缩的CSS和JavaScript。某些IE6版本也存在问题。 它们支持gzip压缩的HTML文档,但不支持CSS和JavaScript。