您可能知道,与超文本标记语言相关的文件格式是使用服务器端的GZip压缩(由Apache服务器上的mod_gzip压缩)压缩的,并由兼容的浏览器解压缩。(“内容编码”)
这是否只适用于HTML/XML文件?假设我的PHP/Perl文件生成一些简单的逗号分隔的数据,并将其发送到浏览器,它会默认编码吗?
对于Silverlight或Flash这样的平台,当他们下载这些数据时,浏览器/运行时会自动压缩/解压缩吗?有什么方法可以测试一下吗?
发布于 2009-08-09 18:25:58
只对文件有效吗?
不:它经常用于CSS和JS文件,例如--因为这些是构成网站的最大的东西(除了图像),因为JS框架和完整的JS应用程序,它代表了一个巨大的收益!
实际上,任何基于文本的格式都可以很好地压缩(相反,图像就不能,因为它们通常已经被压缩了);有时,从Ajax请求返回的JSON数据也会被压缩--毕竟是文本数据;-)
假设我的
/Perl文件生成一些简单的逗号分隔的数据,并将其发送到浏览器,它会默认编码吗?
这是一个配置问题:如果您将服务器配置为压缩这种类型的内容,那么它可能会被压缩:-)
(如果浏览器说它接受gzip编码的数据)
下面是我在博客上使用的Apache2(使用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 te。
下面是相同的东西,加上/减去我在Apache1 (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文件,但不要压缩图像。
如果你想以同样的方式压缩逗号分隔的数据,你必须将它的内容类型或者它的扩展名添加到你的way服务器的配置中,为它激活gzip压缩。
有什么方法可以测试一下吗?
对于直接返回到浏览器的任何内容,火狐的扩展Firebug或LiveHTTPHeaders都是必备的。
对于没有通过浏览器的标准通信方式的内容,它可能更难;最终,您可能不得不使用诸如Wireshark之类的东西来“嗅探”真正通过管道的内容……那就祝你好运!
像Silverlight或Flash这样的平台呢?当他们下载这些数据时,浏览器/运行时会自动压缩/解压缩吗?
为了回答你关于Silverlight和Flash的问题,如果他们发送了一个Accept标头,表明他们支持压缩内容,Apache将使用mod_deflate或mod_gzip。如果它们不支持压缩,它们就不会发送报头。它将“只是工作”。-- Nate
发布于 2009-08-09 18:34:16
我认为阿帕奇的mod_deflate比mod_gzip更常见,因为它是内置的,并且做同样的事情。看看mod_deflate的文档(上面的链接),你会发现很容易根据它们的MIME类型指定要压缩的文件类型。一般来说,压缩HTML、CSS、XML和JavaScript是值得的。图像已经被压缩了,所以它们不能从压缩中获益。
发布于 2009-08-09 18:41:52
浏览器发送一个"Accept-Encoding“报头,其中包含它知道如何理解的压缩类型。服务器和用户代理一起查看结果,并决定如何对结果进行编码。一些浏览器在他们能理解的东西上撒谎,所以这比仅仅在头部搜索"deflate“要复杂得多。
从技术上讲,任何包含内容的HTTP/2xx响应都可以使用任何有效的内容编码(gzip、zlib、deflate等)进行内容编码,但在实践中,对常见图像类型应用压缩是很浪费的,因为这实际上会使它们变得更大。
您绝对可以压缩来自动态PHP页面的响应。最简单的方法是添加:
<?php ob_start("ob_gzhandler"); ?> 添加到每个PHP页面的开头。当然,最好是通过PHP配置来设置它。
有许多测试页面,很容易用Google找到
https://stackoverflow.com/questions/1251908
复制相似问题