您可能知道HTML相关文件格式是使用GZip压缩,服务器端(在Apache服务器上由mod_gzip)压缩的,并且由兼容的浏览器解压缩。 (“内容编码”)
这仅适用于HTML / XML文件吗?假设我的PHP / Perl文件生成一些简单的逗号分隔数据,并将其发送到浏览器,它是否会默认编码?
Silverlight或Flash等平台在下载此类数据时会自动由浏览器/运行时压缩/解压缩吗?有没有办法测试这个?
答案 0 :(得分: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文件,但不要压缩图像。
如果您希望以相同的方式压缩以逗号分隔的数据,则必须添加其内容类型或其对Web服务器配置的扩展,以激活它的gzip压缩。
有没有办法测试这个?
对于直接返回浏览器的任何内容,Firefox的扩展程序Firebug或LiveHTTPHeaders是必备内容。
对于不通过浏览器标准通信方式的内容,可能会更难;最后,你可能不得不最终使用类似Wireshark的东西来“嗅”通过管道的东西......祝你好运!
Silverlight或Flash等平台怎么样, 当他们下载这些数据时,它将被压缩/解压缩 由浏览器/运行时自动?
要回答有关Silverlight和Flash的问题,如果他们发送一个表示支持压缩内容的Accept标头,Apache将使用mod_deflate或mod_gzip。如果他们不支持压缩,他们将不会发送标题。它将“正常工作。” - Nate
答案 1 :(得分:5)
我认为Apache的mod_deflate
比mod_gzip
更常见,因为它是内置的并且做同样的事情。查看mod_deflate
(上面链接)的文档,您将看到根据MIME类型指定要压缩的文件类型很容易。通常,压缩HTML,CSS,XML和JavaScript是值得的。图像已经被压缩,因此它们不会受益于压缩。
答案 2 :(得分:4)
浏览器发送一个“Accept-Encoding”标头,其中包含它知道如何理解的压缩类型。服务器与用户代理一起查看此内容并决定如何对结果进行编码。有些浏览器谎称他们能理解什么,所以这比在标题中搜索“deflate”更复杂。
从技术上讲,任何带有内容的HTTP / 2xx响应都可以使用任何有效的内容编码(gzip,zlib,deflate等)进行内容编码,但实际上将压缩应用于常见的图像类型是浪费的,因为它实际上是使它们更大。
您绝对可以压缩动态PHP页面的响应。最简单的方法是添加:
<?php ob_start("ob_gzhandler"); ?>
到每个PHP页面的开头。当然,最好通过PHP配置进行设置。
有很多测试页面,很容易找到Google: