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

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

像Silverlight或Flash这样的平台呢,当它们下载这些数据时,浏览器/运行时会自动压缩/解压缩这些数据吗?有什么方法可以测试这个吗?

有帮助吗?

解决方案

这仅适用于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 的扩展 萤火虫 或者 实时HTTP标头 是必备品。

对于不通过浏览器标准通信方式的内容,可能会更困难;最后,你可能不得不使用类似的东西 Wireshark “嗅探”管道中真正流过的东西......祝你好运!

诸如Silverlight或Flash之类的平台时,当他们下载此类数据时,浏览器/运行时会自动压缩/解压缩吗?

要回答有关 Silverlight 和 Flash 的问题,如果它们发送 Accept 标头表明它们支持压缩内容,Apache 将使用 mod_deflate 或 mod_gzip。如果他们不支持压缩,他们将不会发送标头。它将“只是工作”。 - 内特

其他提示

我认为Apache的 mod_deflate mod_gzip更常见,因为它的内置和做同样的事情。看看在mod_deflate(上面链接)的文件,你会看到,它很容易指定要压缩的文件类型,根据他们的MIME类型。一般来说它的价值压缩HTML,CSS,XML和JavaScript。图像已经被压缩,因此它们不会从压缩中受益。

浏览器发送一个“Accept-Encoding”标头,其中包含它知道如何理解的压缩类型。服务器与用户代理一起查看此信息并决定如何对结果进行编码。有些浏览器会谎报它们可以理解的内容,因此这比仅仅在标头中搜索“deflate”要复杂得多。

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top