AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 530437
Accepted
Antonis Christofides
Antonis Christofides
Asked: 2013-08-13 08:01:39 +0800 CST2013-08-13 08:01:39 +0800 CST 2013-08-13 08:01:39 +0800 CST

无法让 nginx 回复带有压缩内容的 ab

  • 772
ab -n 1 -H 'Accept-Encoding: gzip, deflate' http://mywebsite.com/

这总是返回未压缩的内容(我可以从它的大小和因为我正在嗅探流量中看到ngrep)。

但是,如果我使用 Firefox 请求内容,结果会被压缩。Content-Encoding: gzip它说。我尝试指定abFirefox 指定的所有请求标头,因为我看到它们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.

嗯,也许它可能是协议版本。

nginx
  • 2 2 个回答
  • 1303 Views

2 个回答

  • Voted
  1. Best Answer
    Antonis Christofides
    2013-08-13T23:42:40+08:002013-08-13T23:42:40+08:00

    事实上,协议版本是问题所在。正如 Mark Stosberg 所解释的,HTTP 1.0 是否支持压缩尚不清楚。很清楚的是,默认情况下,nginx 仅支持 1.1 的压缩。这可以通过配置选项进行更改:

     gzip_http_version 1.0;
    
    • 2
  2. Mark Stosberg
    2013-08-13T10:13:02+08:002013-08-13T10:13:02+08:00

    这似乎是HTTP 1.0vs的问题HTTP 1.1。有关差异的文档包括:

    HTTP/1.1(与 HTTP/1.0 不同)仔细指定 Accept-Encoding 标头,客户端使用它来指示它可以处理哪些内容编码,以及它喜欢哪些内容编码。一个棘手的问题是需要支持试图创建源服务器资源镜像的“机器人”客户端。另一个问题是需要与 HTTP/1.0 实现互操作,而 Accept-Encoding 没有很好地指定。

    这是一个交叉检查的想法 将 Firefoxab排除在外,并使用为此专门构建的工具发送原始 HTTP 请求,例如GET来自libww-perl发行版。这是一个开始的示例语法:

    GET -sSe -H 'Connection: keep-alive' -H 'Accept-Encoding: gzip, default'  'http://example.com' | head -40
    

    您可以从那里查看如何添加更多标头以使其与您的请求相匹配。

    • 1

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve