7

您可能知道与 HTML 相关的文件格式是使用 GZip 压缩在服务器端压缩的(通过Apache 服务器上的mod_gzip),并由兼容的浏览器解压缩。(“内容编码”)

这仅适用于 HTML/XML 文件吗?假设我的 PHP/Perl 文件生成一些简单的逗号分隔数据,并将其发送到浏览器,默认情况下会对其进行编码吗?

Silverlight 或 Flash 等平台在下载此类数据时会自动被浏览器/运行时压缩/解压缩吗?有什么方法可以测试这个吗?

4

3 回答 3

9

这仅适用于 HTML/XML 文件吗?

不:它经常用于 CSS 和 JS 文件,例如——因为它们是构成网站的最大的东西之一(除了图像),因为 JS 框架和完整的 JS 应用程序,它代表了巨大的收益!

实际上,任何基于文本的格式都可以很好地压缩(相反,图像不能,例如,因为它们通常已经被压缩);有时,从 Ajax 请求返回的 JSON 数据也会被压缩——毕竟它是文本数据;-)

假设我的 PHP/Perl 文件生成一些简单的逗号分隔数据,并将其发送到浏览器,默认情况下会对其进行编码吗?

这是一个配置问题:如果您将服务器配置为压缩那种内容,它可能会被压缩
:-)(如果浏览器说它接受 gzip 编码的数据)


这是我在博客中使用的 Apache 2(使用 mod_deflate)的配置示例:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/xml
</IfModule>

在这里,我希望 html/xml/css/JS 被压缩。

这是同样的事情,加上/减去我曾经使用过的一些配置选项,在 Apache 1 (mod_gzip) 下:

<IfModule mod_gzip.c>
    mod_gzip_on                   Yes
    mod_gzip_can_negotiate        Yes

    mod_gzip_minimum_file_size    256
    mod_gzip_maximum_file_size    500000

    mod_gzip_dechunk              Yes

    mod_gzip_item_include         file       \.css$
    mod_gzip_item_include         file       \.html$
    mod_gzip_item_include         file       \.txt$
    mod_gzip_item_include         file       \.js$
    mod_gzip_item_include         mime       text/html

    mod_gzip_item_exclude         mime       ^image/
</IfModule>

这里需要注意的是我不想压缩太小(增益不是很重要)或太大(会占用太多 CPU 来压缩)的文件进行压缩;我希望压缩 css/html/txt/js 文件,而不是图像。


如果您希望以相同的方式压缩逗号分隔的数据,则必须将其内容类型或扩展名添加到您的网络服务器的配置中,才能为其激活 gzip 压缩。

有什么方法可以测试这个吗?

对于任何直接返回到浏览器的内容,Firefox 的扩展FirebugLiveHTTPHeaders是必备的。

对于不经过浏览器标准通信方式的内容,可能会比较难;最后,您可能不得不最终使用Wireshark之类的东西来“嗅探”真正通过管道的东西......祝你好运!

Silverlight 或 Flash 等平台在下载此类数据时会自动被浏览器/运行时压缩/解压缩吗?

为了回答您关于 Silverlight 和 Flash 的问题,如果它们发送 Accept 标头表明它们支持压缩内容,Apache 将使用 mod_deflate 或 mod_gzip。如果他们不支持压缩,他们将不会发送标头。它会“正常工作”。–内特

于 2009-08-09T18:25:57.623 回答
5

我认为 Apachemod_deflate比 Apache 更常见mod_gzip,因为它是内置的并且做同样的事情。查看mod_deflate(上面链接)的文档,您会发现根据 MIME 类型指定要压缩的文件类型很容易。一般来说,压缩 HTML、CSS、XML 和 JavaScript 是值得的。图像已经被压缩,因此它们不会从压缩中受益。

于 2009-08-09T18:34:15.937 回答
4

浏览器发送一个“Accept-Encoding”标头,其中包含它知道如何理解的压缩类型。服务器与用户代理一起查看此内容并决定如何对结果进行编码。一些浏览器对他们能理解的内容撒谎,所以这比在标题中搜索“deflate”更复杂。

从技术上讲,任何带有内容的 HTTP/2xx 响应都可以使用任何有效的内容编码(gzip、zlib、deflate 等)进行内容编码,但实际上对常见图像类型应用压缩是一种浪费,因为它实际上会使它们变得更大.

您绝对可以压缩来自动态 PHP 页面的响应。最简单的方法是添加:

<?php ob_start("ob_gzhandler"); ?>  

到每个 PHP 页面的开头。当然,最好通过 PHP 配置进行设置。

有很多测试页面,用谷歌很容易找到:

于 2009-08-09T18:41:51.803 回答