压缩通过减小HTTP响应的大小来减少响应时间。Gzip是目前最流行和有效的压缩方法,通常可以将响应大小减少约70%。
2009年,90%的互联网流量通过支持Gzip的浏览器传输。如今
所有现代浏览器都支持并自动协商所有HTTP请求的GZIP压缩:我们的工作是确保服务器在客户端请求时正确配置为提供压缩的资源。
在基于Apache的服务器上,您可以通过`.htaccess`文件来实现。
# BEGIN GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</ifmodule>
# END GZIP
这本质上是Gzip将应用于的一系列MIME类型。您可以随意更改此列表,以包含您提供的所有基于文本的资源。
HTML5 Boilerplate项目提供了所有流行服务器的服务器配置。这是其针对.htaccess的版本。
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE "application/atom+xml" \
"application/javascript" \
"application/json" \
"application/ld+json" \
"application/manifest+json" \
"application/rdf+xml" \
"application/rss+xml" \
"application/schema+json" \
"application/vnd.geo+json" \
"application/vnd.ms-fontobject" \
"application/x-font-ttf" \
"application/x-javascript" \
"application/x-web-app-manifest+json" \
"application/xhtml+xml" \
"application/xml" \
"font/eot" \
"font/opentype" \
"image/bmp" \
"image/svg+xml" \
"image/vnd.microsoft.icon" \
"image/x-icon" \
"text/cache-manifest" \
"text/css" \
"text/html" \
"text/javascript" \
"text/plain" \
"text/vcard" \
"text/vnd.rim.location.xloc" \
"text/vtt" \
"text/x-component" \
"text/x-cross-domain-policy" \
"text/xml"
</IfModule>
不支持Gzip的10%用户会发生什么情况?
那么文件就不会被Gzip压缩。
我就是那1%!
他们最终会选择加入。
在gzip中添加以下内容
Header set Cache-Control “max-age=290304000, public”
在Apache 2下,最好使用mod_deflate
为什么在Apache 2下deflate更好?
我从未理解如何使Gzip正常工作。仅仅将这段代码复制到.htaccess中就能压缩我的所有内容吗?
一些服务器不支持它。这可能是它对您不起作用的原因。上面的示例将压缩以下文件类型
– 文本
– html
– xml
– css
– js
重要的是服务器如何处理文件,而不是文件扩展名。无论格式如何,图像都不会使用此设置进行压缩。这样做没有意义,因为所有图像类型都以某种方式使用了压缩。并且这些压缩方法在处理位图(图像数据)方面效率更高。
它将压缩“.htaccess”文件所在的目录。
这样做有缺点吗?
当使用此功能时,不支持gzip的浏览器会发生什么情况?
我作为一个.htaccess新手有一个问题。
这段代码是如何工作的?
我已经将它添加到我的.htaccess文件中,但在FireBug中的YSlow显示我没有使用gzip压缩?
有什么想法吗?
我想知道.htaccess文件在哪里,以及如何将上述代码放到其中,也请告诉我如何进行gzip/deflat集成。
我添加了那段字符串,但没有生效。我的服务器使用Apache 2。
我使用这段代码进行gzip和deflat压缩
# GZIP开始
# mod_gzip压缩(旧版,Apache 1.3)
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|xml|txt|css|js)$
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>
# GZIP结束
# DEFLATE压缩
<IfModule mod_deflate.c>
# 设置以下文件的压缩:html、txt、xml、js、css
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
# 对有问题的浏览器禁用压缩
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
# 设置代理服务器的头信息
Header append Vary User-Agent
</IfModule>
# DEFLATE结束
您如何看待这段代码?
刚刚测试了一下,效果很好,谢谢!
我有一个页面加载JavaScript,它可以让我知道加载时间。在我将这段代码添加到public_html根目录下的.htaccess文件后,我的网站在移动设备上的加载时间从大约2.2-1.5秒缩短到0.8-0.4秒。
不到半秒。
优化您的CSS,输入这段代码……令人震惊。
谢谢您,先生!
太棒了,非常感谢。
我刚刚检查了我的一个测试网站,它被压缩了超过70%!
我已将其添加到httpd.conf中。这样做可以吗,或者是否应该始终将此代码添加到需要的.htaccess文件中?
再次感谢,
James
嗨,我无法压缩我的文件。我从网上搜索了很多,但仍然无法理解。我安装了Apache Tomcat(版本6)。将var文件放在webapps中。创建了一个httpd.conf文件并将其放在conf文件夹中。我不知道更多了。请帮我。我将上面的代码片段复制到了其中。但我没有发现任何变化。
那么,这段代码应该放在哪里?它只是一个放在网站根目录下的PHP文件吗?
谢谢!真的帮助我加快了网站速度。
我使用它来压缩我的php页面
php_value output_handler ob_gzhandler
它不适用于php中的flush()。
是否有任何压缩方法适用于flush()?
您还应该添加`image/svg+xml`。
文章标题是“启用Gzip压缩”,但您却使用了mod_deflate!""
对于Gzip,您需要使用mod_gzip!!
例如""
参考:http://www.parorrey.com/blog/webmaster-tasks/enabling-gzip-compression-on-your-website-on-apache-via-htaccess/
你好,
我使用了它,但我的YSlow仍然显示css和js文件需要gzip。
非常感谢!!
页面速度得分92/100;))
我们刚刚发布了一项免费的beta服务,允许Web开发人员检查所有页面资源的gZIP(以及其他性能指标,例如资源加载时间)。
我们认为这是检查gzip最快、最简单的方法。我们牢记人们不想被大量数据淹没,因此您获得的结果直截了当。
gzipWTF
这太棒了。如果旧浏览器不支持它,那也没关系。我坚信为未来而构建。谢谢Chris。
非常感谢,我的网站压缩了69.9%,正如您所说的那样。网站运行速度比以前快得多。
你好,
我有一个关于 gzip 的问题。
假设服务器添加了“Content-Encoding: gzip”头部。
但是,实际内容没有被 gzip 压缩(假设压缩失败,并且正在发送未压缩的数据)。这会有什么影响?
HTTP 客户端(尤其是浏览器)将如何处理这种情况?
谢谢,
Narendra
我的服务器在强制使用 Gzip 时总是崩溃,我不得不在 PHP 中实现它,有什么想法吗?
我也是……
您使用的是主机服务商吗?每个主机服务商都不同。大多数都支持它,但需要您启用它。如果您浏览他们的问答部分,通常有人已经问过这些问题并得到了答案。
例如,我使用 Hostmonster,因此我必须执行此操作才能为我的网站启用它。在文章中,它显示我必须先编辑我的 php.ini 文件夹以启用它,然后将代码添加到 .htaccess 文件中。
如果您没有 .htaccess 文件,则只需创建一个并添加它。HTML5 Boilerplate 有一个很棒的 .htaccess 文件,涵盖了行业中使用的大部分内容。
http://goo.gl/t4381
我的头部有一个 2 MB 的 png 图片。我无法减小图片大小,否则会显得太失真了。有没有办法在 htaccess 中压缩该图片?这段代码对我来说效果很好,压缩比为 2.7 倍。
2 MB 的图片绝不是一个好主意。为了上帝的缘故,使用 Photoshop 并保存为网页和设备格式。如果您仍然对 png 图片的大小有疑问,那么也许该图片不适合作为 png 格式,您需要将 png 与其后面的背景结合起来并将其转换为 jpg 格式。头部图片的大小应该是这个的百分之一。如果有人通过计量连接(移动设备)访问您的网站并支付高价来观看您 2 MB 的杰作怎么办?
您可以使用 tinypng.org 压缩您的 PNG,而不会损失任何质量和大小。:D
这个怎么样?
抱歉,上一条评论显示不正确。以下是代码。只需将“[”和“]”分别替换为“<”和“>”。
你好,
抱歉,发布时字符错误,需要替换……
以下是我的主机管理员所做的操作
\# 优化
ExpiresActive On
ExpiresDefault A0
\# 将媒体缓存 1 年(永久)。
[FilesMatch “\.(gif|jpg|jpeg|png|gif|bmp|swf)$”]
ExpiresDefault A31536000
Header append Cache-Control “public”
[/FilesMatch]
\# 为常用更新文件设置 2 小时缓存
[FilesMatch “\.(xml|txt|html|js|css)$”]
ExpiresDefault A1209600
Header append Cache-Control “proxy-revalidate”
[/FilesMatch]
[FilesMatch “\.(php|cgi|pl|py|rb|rhtml|htm)$”]
ExpiresActive Off
Header set Cache-Control “private, no-cache, no-store, proxy-revalidate, no-transform”
Header set Pragma “no-cache”
[/FilesMatch]
[IfModule mod_deflate.c]
AddOutPutFilterByType DEFLATE text/html text/plain text/xml
[IfModule mod_setenvif.c]
# Netscape 4.x 存在一些问题……
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 存在更多问题
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE 伪装成 Netscape,但它没问题
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# 注意:由于 mod_setenvif 在 Apache 2.0.48 之前的版本中存在一个错误
# 上述正则表达式将不起作用。您可以使用以下
# 解决方法来获得期望的效果
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# 不要压缩图片
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
[/IfModule]
[IfModule mod_headers.c]
# 确保代理不会提供错误的内容
Header append Vary User-Agent env=!dont-vary
[/IfModule]
[/IfModule]
谢谢,我测试了该代码,它确实完美地工作了
+1 给 André von Kugland,将 SVG 添加到 mime 列表中。
如果您可以控制 Apache httpd.conf 文件,也将其放在其中。.htaccess 文件可能会使网站速度降低约 5%(我在某个地方读到过,请在 Google 上搜索)对网站的每个 CSS、图片或 HTML 请求都需要 Apache 在响应请求之前读取 .htaccess。将其放在 httpd.conf 中意味着它将在 Apache 启动时读取一次。
我们的 SEO 套餐经济实惠,并提供所有活动
实现高搜索引擎排名的必要条件。但发现一些可以产生更好结果的新事物会更有意义。
Google Zebra 上的 SEO 将专注于创建有用、透明和独特的数据,但
主要变化将是社交信号的力量。
我需要使用 ASP.NET 3.5 使用 gzip 压缩来压缩我的代码……有什么解决方案???
我使用了以下代码,但它在在线网站上不起作用……它在本地 IIS 上可以工作
<system.webServer>
</system.webServer>
请查看以下代码以解决上述问题
使用以下代码对我有用
BEGIN GZIP
mod_gzip 压缩(旧版,Apache 1.3)
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|xml|txt|css|js)$
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.
END GZIP
DEFLATE 压缩
设置压缩目标:html、txt、xml、js、css
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
停用有问题的浏览器的压缩
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
设置代理的头部信息
Header append Vary User-Agent
END DEFLATE
完全迷茫了。需要帮助。我们托管在共享服务器上,似乎服务提供商无法更改服务器设置。并且未启用压缩。现在我们该怎么办。
我们主要有 HTML 页面,并且网站使用 Asp.Net 设计。如何使用 gzip 压缩 HTML 页面?
请帮助。
你好,
我做了我应该做的事情,但在 gzipWTF.com 上检查后,似乎没有任何内容被压缩。
知道为什么吗?代码在 .htaccess 中没有其他问题,它只是什么也没做。
我得到了启用 gzip 和缓存方法的结果,但我无法在服务器(Apache 2.2)端获得结果,请协助我。
如果它是共享服务器,.htaccess 中的 gzip 会起作用吗?我的供应商告诉我我的服务器不支持压缩。抱歉,新手问题
呃,text/text?你确定吗?我在维基百科的常见媒体类型列表中找不到这种 mime 类型。
除了使用 Gzip 压缩 CSS 文件外,您还可以使用当今可用的许多在线压缩器(如这个或这个)来进一步压缩它们。有时我可以将其压缩到原始大小的 90% 以上(使用 Gzip)。
尝试了 gzip 和 mod_deflate,但它们都破坏了我子目录中的一个关键脚本。所以问题是,是否可以启用任何此类压缩形式,然后在子目录级别禁用它。这样所有内容都将被压缩,除了子目录。
提醒所有启用压缩的用户,请务必在之后测试所有脚本。
谢谢!
不应该使用“.htaccess”而不是“.haccess”吗?或者我错过了什么?
说得好!刚刚修复了那个错别字……
非常感谢您的教程,
我在一个运行良好的服务器上执行了相同的操作,
但在另一个服务器上却不行!
这是否与 PHP、Apache 版本或类似的东西有关?
谢谢!对我有用! :)
我在我的网站(سئو)中使用它。但是,当我用 gtmetrix 检查时,没有找到。原因是什么?
我无法使用 .htaccess,但我想启用 Gzip。
如何启用 gzip?我可以使用 html,但如果我输入文件,任何人都可以从我的网站读取它。
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include 文件。(html?|txt|css|js|php|pl)$
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.
‘
我想用 html 方法来实现。
只是一个排版反馈,不是为了发帖。
文本:这是它的版本
错误:it’s
修正:its
谢谢!
我使用此方法启用了 SVG 压缩,但 SVG 资产现在无法加载。有什么想法吗?
这篇文章已经10年了。我仍然难以找到解决启用 gzip 造成的 BREACH 攻击风险的答案。VPS 和共享主机产品默认不支持 Brotli,所以我很想知道答案是什么。CloudFlare 压缩效果不错,但 DNS 速度慢。我看到的唯一答案是金钱。:-(
因为它在压缩版本中工作。
http.couchdb.svg.mime⁸.gzip svgz.cherry tree.svg.sudo nano
代码在 javascript 或 CSS 文件上不起作用。我尝试了很多不同的设置,同样的代码在其他网站上运行良好。我确实联系了主机,他们说文件的版本号(以变量结尾)意味着它不会压缩这些文件。我只是不确定如何解决这个问题。有什么建议吗?