5

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

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

谢谢。

4

7 回答 7

3

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

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

- 更新

经过进一步调查,您的 RewriteCond 似乎并没有真正做您认为它正在做的事情。根据文档,RewriteCond 指令仅与 RewriteRule 结合使用。

于 2009-06-08T00:14:53.160 回答
3
  1. 您必须使用Content-Encoding: gzip响应标头。
  2. Accept-Encoding只有当客户端的标头允许GZIP时,您才必须返回 GZIP 压缩内容。
于 2009-06-26T04:43:06.440 回答
3

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

AddEncoding gzip .jsz
AddType text/javascript .jsz
于 2009-06-26T04:55:39.410 回答
3

如果扩展名为 .gz,则 Safari(和 Google Chrome)不适用于压缩文件

要在 Safari 和 Chrome 上支持 gzip 存档,请将 .css 和 .js 文件复制并压缩到 gzip 中,并将它们重命名为 .jgz 上的 .gz 扩展名(例如:之前 - 一个文件 style.css 进入目录 after - 两个文件,样式.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 配合使用)

于 2012-04-09T10:54:02.950 回答
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

请参阅原始帖子:如何使我的 .htaccess 文件允许 Safari 和其他浏览器打开 GZIP?

于 2009-08-07T20:48:08.427 回答
0

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

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

但不幸的是 Apache 不允许设置该标头字段。反而Content-Encoding会变成X-Content-Encoding

于 2009-06-16T08:09:43.497 回答
-2

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

于 2009-06-08T07:31:43.813 回答