【问题标题】:pre-compressed gzip break on chrome, why?chrome上的预压缩gzip中断,为什么?
【发布时间】:2010-11-01 01:18:05
【问题描述】:

我在我的网站上提供预压缩的 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 的文件 [示例]:

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

那么为什么这会在谷歌浏览器中中断?

谢谢。

【问题讨论】:

    标签: javascript .htaccess gzip google-chrome


    【解决方案1】:

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

    仅供参考,Fiddler 是一个客户端代理,可以过滤您的浏览器请求。处理此类问题时提供的信息非常丰富。

    -- 更新

    经过进一步调查,您的 RewriteCond 似乎并未真正按照您的想法进行操作。根据Documentation,RewriteCond 指令仅与 RewriteRule 结合使用。

    【讨论】:

      【解决方案2】:

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

      AddEncoding gzip .jsz
      AddType text/javascript .jsz
      

      【讨论】:

        【解决方案3】:

        如果扩展名为 .gz,Safari(和 Google Chrome)不能与压缩文件一起使用

        要在 Safari 和 Chrome 上支持 gzip 存档,请将 .css 和 .js 文件复制并压缩到 gzip 中,并将它们重命名为 .jgz 上的 .gz 扩展名 (例如: before - 一个文件 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 一起使用)

        【讨论】:

          【解决方案4】:
          1. 您必须使用Content-Encoding: gzip 响应标头。
          2. 只有当客户端的Accept-Encoding 标头允许GZIP时,您才必须返回 GZIP 压缩内容。

          【讨论】:

            【解决方案5】:

            我用更保守的 Gzip 匹配规则回答了一个类似的问题:

            Safari、Chrome 和 IE6 都有 Gzipped 下载的问题。还, Apache 将进行 gzip 压缩 对你来说,无需手动 gzip 文件。试试这个 sn-p:

            # 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?

            【讨论】:

            • 我看不到您的配置会阻止在 chrome 浏览器中执行 gzip...
            【解决方案6】:

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

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

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

            【讨论】:

            • 那么如果它变成带有X前缀的意思是什么?
            • 表示不会被识别。
            【解决方案7】:

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

            【讨论】:

            • 如何过滤那些在我的 htaccess 文件中不支持的人?
            • 您不应直接从 HTML 链接到 .gz 文件。您可以使用 mod_rewrite 或(甚至更好)mod_negotiation,因此请发送 gzip 压缩文件。
            • 或者只是 yui 压缩它们,这将为您提供有效的 JS 和相当的压缩节省
            • YUI 压缩远不及 gzip 压缩。通常你也会 gzip YUI 的结果。见:julienlecomte.net/blog/2007/08/13
            • 是的,它们已经被 Dean's PACKER 压缩了,但是 GZIP 是迄今为止最好的解决方案。我的服务器不支持动态 GZIP..所以我必须预压缩它们。 mod_rewrite 不起作用。即使有,对 Chrome 的情况有帮助吗?
            猜你喜欢
            • 2013-05-17
            • 1970-01-01
            • 2015-03-12
            • 2012-09-04
            • 1970-01-01
            • 2017-12-27
            • 2010-09-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多