如何判断我的服务器是否提供GZip压缩内容?

207

我在一个NGinx服务器上有一个web应用程序。我在配置文件中设置了gzip on,现在我正在尝试查看它是否起作用。YSlow说它没有起作用,但是进行测试的6个网站中有5个说它已经启用了。我如何得到明确的答案,并且为什么结果会有差异?

8个回答

282
看起来一个可能的答案是,毫不意外地,curl
$ curl http://example.com/ --silent --write-out "%{size_download}\n" --output /dev/null
31032
$ curl http://example.com/ --silent -H "Accept-Encoding: gzip,deflate" --write-out "%{size_download}\n" --output /dev/null
2553

在第二种情况下,客户端告诉服务器它支持内容编码,你可以看到响应确实更短,被压缩了。

5
这是正确的,但gzip可以配置为压缩某些文件类型并排除其他文件类型。因此,请确保您使用此测试curl的文件属于将被压缩的类型。 - Tyler Biscoe
10
我建议在使用curl时也加上-L标志以便跟随所有重定向,例如从非www网址跳转到www,否则就可能导致size_download的结果不准确。 - vladkras
1
如果我能向我的年轻开发者强调一件事情,那就是拥有坚实的 Unix 基础的重要性。对于 CURL 给一个赞。一开始可能会感到困惑,但当你掌握了它时,它可以帮你节省生命。 - Akron

161

更新

Chrome更改了其报告方式(如果感兴趣,请参见原始答案)。您可以使用开发者工具(F12)进行检查。转到网络选项卡,选择要检查的文件,然后查看右侧的标头选项卡。如果已经压缩,则在内容编码中将其显示出来。

在此示例中,slider.jpg确实被压缩了。

输入图像描述

将其与您正在访问的此页面中的png文件进行比较,您将看不到这样的指定。

输入图像描述

只是为了明确,这并不是因为一个是jpg,而另一个是png。这是因为一个被压缩了,而另一个没有。


先前的答案

在Chrome中,如果您打开开发者工具并转到“网络”选项卡,则会显示以下内容,如果没有压缩,则会显示以下内容:

输入图像描述

如果有压缩,则会显示以下内容:

输入图像描述

换句话说,相同的数字,上下都是一样的,表示没有压缩。


3
检查响应头可能会更好。这种方法无法确定是否使用了gzip压缩或其他压缩算法。 - Samuel
4
在 Chrome 开发者工具中的 Network 选项卡,点击请求中资源名称/链接即可检查响应头信息,然后可以看到 Content-Encoding 键对应的值为 gzip截图 - d48
4
最近的Chrome版本(版本44.0.2403.130 m)似乎没有显示大小/内容细节 - 我指的是gzip细节 - http://i.imgur.com/MTz7DCM.png。有人知道原因吗? - Andy Dufresne

36

可以在响应头中查看。在 FireFox 中,您可以使用 Firebug 进行检查。

Content-Encoding    gzip

如果服务器支持gzip内容,则应该显示此内容。


9
只有在客户端发送了"Accept-Encoding: gzip,deflate"时,才会得到这个结果。 - Maciej Swic
2
强制刷新以查看原始文件的编码,因为当文件使用状态 304 提供时,缓存版本似乎已经解压缩了!(在我的情况下,我看到的是 ETag 头而不是 Content-Encoding) - ptim

20
在 Chrome 的新版本中,开发者工具 > 网络 (Developer tools > network) 中,你可以右键点击列名,选择 content-encoding 选项并添加该列(图像中的黑色方框)。
如果你想要查看那个 gzip 内容的大小,如 @Outfast Source 所述 - 那么你可以点击旁边显示为绿色框的 View 图标。
这样你就可以看到哪些内容启用了 gzip。 enter image description here

2
这是一个很好的答案,但是<kbd>Content-Encoding</kbd>已经移动到<kbd>响应头</kbd>下面了。 - Dan Dascalescu

11

9

我基于zoul的答案编写了这个脚本:

#!/bin/bash

URL=$1
PLAIN="$(curl $URL --silent --write-out "%{size_download}\n" --output /dev/null)"
GZIPPED="$(curl $URL --silent -H "Accept-Encoding: gzip,deflate" --write-out "%{size_download}\n" --output /dev/null)"

if test $PLAIN -gt $GZIPPED
then echo "supported"
else echo "unsupported"
fi

例子:

$ ./script.sh https://example.com/

2

这是我的一行代码:

curl https://google.com --silent -L -H "Accept-Encoding: gzip,deflate" --output testFile && file testFile

file 命令行工具可以告诉你文件的类型。你应该看到这个:

testFile: gzip compressed data, max compression, original size modulo 2^32 13926

其中一个最好的建议,完全被低估了。 - darryn.ten

0

由于它是谷歌的第一个搜索结果,我将编辑其中一个答案以包括Brotli压缩,其简称为br,您可以使用curl或通过浏览器中的F12进行监视。

对于从@zoul answer编辑的curl

$ curl http://example.com/ --silent --write-out "%{size_download}\n" --output /dev/null
31032
$ curl http://example.com/ --silent -H "Accept-Encoding: gzip,deflate,br" --write-out "%{size_download}\n" --output /dev/null
2553

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接