我如何知道我的服务器是否正在提供gzip的内容?

我在NGinx服务器上有一个web应用程序。我在conf文件中设置了gzip on,现在我试图看看它是否有效。YSlow说不是,但做测试的6个网站中有5个说是的。我如何才能得到一个明确的答案,为什么会有不同的结果?

112932 次浏览

看起来一个可能的答案是,不出意外,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

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

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

Content-Encoding    gzip

如果服务器支持gzip内容,那么应该显示这个。

你可以快速使用类似http://www.whatsmyip.org/http-compression-test/的web服务

谷歌Chrome的“审计”工具在开发工具派上用场。

更新

Chrome改变了它报告的方式(如果感兴趣,请参阅原始答案)。你可以使用开发人员工具(F12)来判断。转到Network选项卡,选择要检查的文件,然后查看右侧的Headers选项卡。如果你是gzipped,那么你会在Content-Encoding中看到。

在本例中,slider.jpg确实被gzip压缩了。

enter image description here

将其与您所在的这个页面进行比较,并查看一个png文件,您将看不到这样的名称。

enter image description here

需要明确的是,这并不是因为一个是jpg,一个是png。这是因为一个是gzip的,而另一个没有。


以前的回答

在Chrome浏览器中,如果你打开开发人员工具并进入网络选项卡,如果没有压缩,它将显示如下:

enter image description here

如果存在压缩,则如下:

enter image description here

换句话说,相同的数字,顶部和底部,意味着没有压缩。

我根据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/

在新版本的chrome,开发工具>网络,您可以右键单击列名,并选择内容编码选项,并添加该列(图像中的黑盒子)。

如果你想查看gzip内容的大小,如@Outfast Source -那么你可以点击查看旁边的图标(如图中显示为绿色框)。

因此,您可以看到哪些内容启用了gzip。

enter image description here

下面是我的一句话:

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