ab -n 1 -H 'Accept-Encoding: gzip, deflate' http://mywebsite.com/
这总是返回未压缩的内容(我可以从它的大小和因为我正在嗅探流量中看到ngrep
)。
但是,如果我使用 Firefox 请求内容,结果会被压缩。Content-Encoding: gzip
它说。我尝试指定ab
Firefox 指定的所有请求标头,因为我看到它们ab
被嗅探,但仍然将其解压缩,而 Firefox 将其压缩。
我正在运行我自己编译的 nginx 版本,但它与 Debian 挤压反向移植 1.2.1 版本相同,除了它具有 syslog 补丁。ApacheBench 2.3 修订版 655654。这是 nginx gzip 配置:
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_vary on;
文档类型是text/html
(上面没有列出,但总是被nginx压缩;另外,我尝试添加它,没有区别)。它是动态的,从uwsgi
后端接收。
从以下位置嗅探请求标头ab
:
GET [...] HTTP/1.0.
Accept-Encoding: gzip, deflate.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:23.0) Gecko/20100101 Firefox/23.1.
Accept-Language: en-US,en;q=0.5.
Cookie: csrftoken=[...].
Authorization: Basic [....].
Connection: keep-alive.
Host: [...].
来自 Firefox 的嗅探请求标头:
GET [...] HTTP/1.1.
Host: [...].
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:23.0) Gecko/20100101 Firefox/23.0.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.
Accept-Language: en-US,en;q=0.5.
Accept-Encoding: gzip, deflate.
Cookie: csrftoken=[...].
Authorization: Basic [...].
Connection: keep-alive.
嗯,也许它可能是协议版本。
事实上,协议版本是问题所在。正如 Mark Stosberg 所解释的,HTTP 1.0 是否支持压缩尚不清楚。很清楚的是,默认情况下,nginx 仅支持 1.1 的压缩。这可以通过配置选项进行更改:
这似乎是
HTTP 1.0
vs的问题HTTP 1.1
。有关差异的文档包括:这是一个交叉检查的想法 将 Firefox
ab
排除在外,并使用为此专门构建的工具发送原始 HTTP 请求,例如GET
来自libww-perl
发行版。这是一个开始的示例语法:您可以从那里查看如何添加更多标头以使其与您的请求相匹配。