您可能知道与 HTML 相关的文件格式是使用 GZip 压缩在服务器端压缩的(通过Apache 服务器上的mod_gzip),并由兼容的浏览器解压缩。(“内容编码”)
这仅适用于 HTML/XML 文件吗?假设我的 PHP/Perl 文件生成一些简单的逗号分隔数据,并将其发送到浏览器,默认情况下会对其进行编码吗?
Silverlight 或 Flash 等平台在下载此类数据时会自动被浏览器/运行时压缩/解压缩吗?有什么方法可以测试这个吗?
您可能知道与 HTML 相关的文件格式是使用 GZip 压缩在服务器端压缩的(通过Apache 服务器上的mod_gzip),并由兼容的浏览器解压缩。(“内容编码”)
这仅适用于 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 的扩展Firebug或LiveHTTPHeaders是必备的。
对于不经过浏览器标准通信方式的内容,可能会比较难;最后,您可能不得不最终使用Wireshark之类的东西来“嗅探”真正通过管道的东西......祝你好运!
Silverlight 或 Flash 等平台在下载此类数据时会自动被浏览器/运行时压缩/解压缩吗?
为了回答您关于 Silverlight 和 Flash 的问题,如果它们发送 Accept 标头表明它们支持压缩内容,Apache 将使用 mod_deflate 或 mod_gzip。如果他们不支持压缩,他们将不会发送标头。它会“正常工作”。–内特
我认为 Apachemod_deflate
比 Apache 更常见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 配置进行设置。
有很多测试页面,用谷歌很容易找到: