代码之家  ›  专栏  ›  技术社区  ›  vsync Qantas 94 Heavy

在Chrome上预压缩gzip中断,为什么?

  •  4
  • vsync Qantas 94 Heavy  · 技术社区  · 15 年前

    我在我的网站上提供预压缩的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" />
    

    那么,为什么谷歌Chrome会出现这种情况呢?

    谢谢。

    7 回复  |  直到 15 年前
        1
  •  3
  •   Jordan S. Jones    15 年前

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

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

    ——更新

    经过进一步的调查,似乎您的重写秒实际上并没有做您认为它在做的事情。根据 Documentation ,rewritesecond指令仅与rewriterule一起使用。

        2
  •  3
  •   Megaburg    12 年前

    如果扩展名为.gz,则safari(和google chrome)不适用于压缩文件。

    要支持safari和chrome上的gzip存档,请将.css和.js文件复制并压缩到gzip中,并将其重命名为.jgz上的.gz扩展名。 (例如: before-one file style.css into目录 两个文件之后,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)

        3
  •  2
  •   David    15 年前

    我们的.htaccess文件(我们有.jsz文件和压缩的javascript,chrome可以很好地处理这些文件):

    AddEncoding gzip .jsz
    AddType text/javascript .jsz
    
        4
  •  1
  •   Community kfsone    7 年前

    我用一个更保守的匹配规则回答了一个类似的问题,即何时到gzip:

    Safari、Chrome和IE6都有 gzip下载有问题。也, 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
  •  1
  •   vsync Qantas 94 Heavy    10 年前
    1. 你必须使用 Content-Encoding: gzip 响应头。
    2. 当客户端的 Accept-Encoding 页眉允许 GZIP .
        6
  •  0
  •   Gumbo    15 年前

    你只需要设置 Content-Encoding 头字段告诉客户机响应数据是用gzip编码的:

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

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

        7
  •  -2
  •   elmuerte    15 年前

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