ab -n 1 -H 'Accept-Encoding: gzip, deflate' http://mywebsite.com/
这总是返回未压缩的内容(我可以看到,从它的大小,因为我用ngrep嗅探stream量)。
但是,如果我用Firefox请求内容,结果是压缩的。 Content-Encoding: gzip它说。 我已经尝试用ab指定所有Firefox指定的请求头,因为我看到它们被嗅探,但仍然得到它解压缩,并且Firefox得到压缩。
我正在运行一个我自己编译的nginx版本,但与Debian压缩backports 1.2.1版本是一样的,除了它有syslog补丁。 ApacheBench 2.3修订版655654.下面是nginx gzipconfiguration:
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;
文档types是text/html (没有在上面列出,但总是由nginx压缩;此外,我试着添加它,没有区别)。 它是dynamic的,从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的压缩。 这可以通过configuration选项进行更改:
gzip_http_version 1.0;
这似乎是HTTP 1.0 vs HTTP 1.1 。 有关不同的文档包括:
HTTP / 1.1(与HTTP / 1.0不同)仔细地指定了Accept-Encoding头,客户使用它来表明它可以处理哪些内容编码,以及哪些更喜欢。 一个棘手的问题是需要支持尝试创build原始服务器资源的镜像的“机器人”客户机; 另一个问题是需要与HTTP / 1.0实现进行交互操作,Accept-Encoding的指定很差。
这里有一个交叉检查的想法让火狐和ab等,并发送原始的HTTP请求使用专门的工具,如从libww-perl分发的GET 。 这是一个开始的例子语法:
GET -sSe -H 'Connection: keep-alive' -H 'Accept-Encoding: gzip, default' 'http://example.com' | head -40
你可以看到如何添加更多的标题,使其匹配您的请求。