如何启用 gzip?
Posted
技术标签:
【中文标题】如何启用 gzip?【英文标题】:How to enable gzip? 【发布时间】:2011-06-10 04:38:15 【问题描述】:我找到了一些关于如何启用 gzip 的教程,但似乎没有什么对我有用,所以我的问题是如何启用 gzip。我在一个共享的 Dreamhost 托管服务器上,它运行 php 5.2 版和 Apache,从我发现这一行的 php 信息中,也许这会有所帮助?
zlib
ZLib Support enabled
Stream Wrapper support compress.zlib://
Stream Filter support zlib.inflate, zlib.deflate
Compiled Version 1.2.3.3
Linked Version 1.2.3.3
Directive Local Value Master Value
zlib.output_compression Off Off
zlib.output_compression_level -1 -1
zlib.output_handler no value no value
我也找到了这条线
_SERVER["HTTP_ACCEPT_ENCODING"] gzip, deflate
我不知道这是否与它有关。但这是我的第一个问题,其次,我有保管箱,托管一个 javscript 文件,我想知道是否可以将该文件 gzip 压缩,它没有被压缩传输,那么有什么办法吗?
【问题讨论】:
你要 gzip 做什么?使用 PHP gzip 函数?压缩 Web 服务器的输出?如果是后者,请安装mod_deflate
,如果您有任何问题/疑问,请尝试serverfault.com。
【参考方案1】:
你试过ob_gzhandler吗?
<?php ob_start("ob_gzhandler"); ?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>
作为替代方案,您可以使用 Apache Web 服务器将 a DEFLATE output filter 添加到***服务器配置或 .htaccess
文件中:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml \
text/css application/x-javascript application/javascript
</IfModule>
提示:有时检测 Web 服务器是否正在发送压缩内容非常棘手。 This online tool 可以提供帮助。
在我的网络浏览器中使用开发人员工具,我测试了一个压缩和不压缩的 PHP 文件以比较大小。就我而言,差异是 1 MB(未压缩)和 56 KB 压缩。
【讨论】:
样式表和javascripts怎么样?我想这将更像是一个 .htaccess 的东西。不过我会试试这个。 据我所知,这并没有给我任何结果。 所做的只是让页面输出源代码减去 php.ini 文件。顺便说一句,我很感激帮助。感谢您帮助我 确认浏览器是否支持gzip压缩: 为什么不直接使用 php.ini 配置zlib.output_compression = 1
?【参考方案2】:
要在 Apache 级别启用编码,我所要做的就是
zlib.output_compression = 1 // the PHP.ini file
这将使服务器做必要的请求头检查、压缩、发送相关头
您也可以在 ob_start()
之前的 PHP 文件中执行此操作
ini_set("zlib.output_compression", 1);
为了让 Apache 压缩静态资源(例如:.js 文件、.css 文件),就像Kamlesh 在他的回答中所做的那样
【讨论】:
【参考方案3】:在 Dreamhost 的官方 wiki 中,他们通过 modifying an htaccess 启用此功能:
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl|jpg|png|gif)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
这主要是检查是否找到了 mod_czip.c,如果找到了,它将为您压缩文件,以便更快地将它们发送到浏览器。据说这可以将下载时间加快 35-40%,然后文件大小应该会下降到 55-65%。
通过在 Google 上快速搜索,您可以在 third party 网站上找到另一个 thread on *** 来解决此问题。
【讨论】:
这很老了。对于 Apache 2,最好改用mod_deflate.c
。
您包含 jpg/png/gif
之类的文件,然后通过 mime image/.*
禁止它们。对我来说真的没有意义。【参考方案4】:
在 Apache 中,启用输出压缩相当简单。将以下内容添加到您的 .htaccess 文件中:
# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files>
来源:http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/
【讨论】:
【参考方案5】:## 首先,您必须更改 WHM(服务器)设置以启用 Gzip。之后更改 cPanel 设置##
对于 WHM 设置 => Easy Apache => 详尽的选项列表 deflate 选项卡 >
对于 cPanel 设置 => 软件/服务 => 优化网站
【讨论】:
【参考方案6】:可以通过两种方式进行压缩。
Apache 实际上有两个压缩选项:
mod_deflate 更容易设置并且是标准的。 mod_gzip 似乎更强大:您可以预压缩内容。Deflate 又快又好用,所以我用它;如果它能让你的船漂浮,请使用 mod_gzip。无论哪种情况,Apache 都会检查浏览器是否发送了“Accept-encoding”标头并返回文件的压缩版本或常规版本。但是,一些较旧的浏览器可能会出现问题(更多内容见下文),您可以添加一些特殊指令来解决此问题。
如果您无法更改 .htaccess 文件,您可以使用 PHP 返回压缩内容。为您的 HTML 文件添加 .php 扩展名并将此代码添加到顶部:
在 PHP 中:
<?php if (substr_count($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘gzip’)) ob_start(“ob_gzhandler”); else ob_start(); ?>
我们检查“Accept-encoding”标头并返回文件的 gzip 压缩版本(否则为常规版本)。这几乎就像构建自己的网络服务器(多么有趣!)。但实际上,如果您能提供帮助,请尝试使用 Apache 来压缩您的输出。您不想胡乱处理您的文件。
参考:http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/
【讨论】:
以上是关于如何启用 gzip?的主要内容,如果未能解决你的问题,请参考以下文章
在 IIS7 上使用 MVC3 时如何启用 gzip 压缩?
如何在 Angular cli 中启用 gzip 压缩以进行生产构建
如何在 Amazon Beanstalk 和 Tomcat 上启用 HTML/JavaScript/CSS 的 gzip