首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器端GZipping是如何工作的?

问服务器端GZipping是如何工作的?
EN

Stack Overflow用户
提问于 2009-08-09 18:22:00
回答 3查看 2.3K关注 0票数 7

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-09 18:25:58

只对文件有效吗?

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

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

假设我的

/Perl文件生成一些简单的逗号分隔的数据,并将其发送到浏览器,它会默认编码吗?

这是一个配置问题:如果您将服务器配置为压缩这种类型的内容,那么它可能会被压缩:-)

(如果浏览器说它接受gzip编码的数据)

下面是我在博客上使用的Apache2(使用mod_deflate)的配置示例:

代码语言:javascript
复制
<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)下使用过的一些配置选项:

代码语言:javascript
复制
<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

票数 9
EN

Stack Overflow用户

发布于 2009-08-09 18:34:16

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

票数 5
EN

Stack Overflow用户

发布于 2009-08-09 18:41:52

浏览器发送一个"Accept-Encoding“报头,其中包含它知道如何理解的压缩类型。服务器和用户代理一起查看结果,并决定如何对结果进行编码。一些浏览器在他们能理解的东西上撒谎,所以这比仅仅在头部搜索"deflate“要复杂得多。

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

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

代码语言:javascript
复制
<?php ob_start("ob_gzhandler"); ?>  

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

有许多测试页面,很容易用Google找到

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1251908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档