如何启用 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何启用网页GZIP压缩

如何在 Jetty 中启用 gzip 压缩?

在 IIS7 上使用 MVC3 时如何启用 gzip 压缩?

如何检测我们博客网站是否启用了Gzip压缩?附2种方法

如何在 Angular cli 中启用 gzip 压缩以进行生产构建

如何在 Amazon Beanstalk 和 Tomcat 上启用 HTML/JavaScript/CSS 的 gzip