【问题标题】:Reliably test if a server gzips content可靠地测试服务器是否压缩内容
【发布时间】:2017-01-23 08:44:02
【问题描述】:

在测试内容是否通过 Apache 的 mod_deflate 压缩后,我似乎得到了不同的结果。

我在一台 PC 上测试相同的 URL,我在响应标头中显示 Content-Encoding:gzip,在另一台具有几乎相同设置(Windows 版本、浏览器版本等)的 PC 上我不这样做,页面加载速度更慢并且尺寸更大。两种情况下都存在请求标头Accept-Encoding:gzip, deflate, lzma, sdch, br

  1. 有人可以推荐一种可靠的方法来测试内容是否经过 gzip 压缩? 我的意思是可靠 - 除了 Chrome 开发工具。
  2. 为什么有些用户即使请求了 gzip 压缩的内容也可能拥有完整的内容?是服务器相关还是客户端相关?如何确保 100% 的用户获得 gzip 压缩的内容?

【问题讨论】:

  • 也许第二台 PC 位于代理(可能是透明的)后面,该代理对标头做了一些事情。
  • @wOxxOm,好主意,虽然当我测试另一个 URL(例如 google.com)时,结果是相同的,两台电脑都将其压缩
  • 坚持代理建议尝试一个不在 https 上的站点,因为这通常会阻止代理读取内容。 bing 或许。
  • @SteveE。我刚刚检查了 bing.com,确实 - 它没有在 那台 机器上压缩。但是,我确实在我的网站 (https) 上对其进行了测试,并且它也没有被压缩,所以在我的情况下,协议有时并不重要。关于如何设置它以使代理无法修改它的任何想法?无论如何,这似乎互联网提供商有增加流量的“聪明”方式,特别是如果客户没有无限套餐:)

标签: apache google-chrome-devtools gzip mod-deflate web-performance


【解决方案1】:

有人可以推荐一种可靠的方法来测试内容是否被压缩?我的意思是可靠 - 除了 Chrome 开发工具。

[Answer] - 一种可靠的测试方法是找出从服务器检索到的内容的大小并与接收到的内容长度进行比较。根据这篇文章 (content-length when using http compression),内容长度将是压缩内容的大小。

如果内容是文本,压缩比将是 3:1 或更高。但是,如果您发送的是压缩图像,它会少很多。在任何情况下,如果压缩有效,它将大于 1:1。

对于测试设置,您可以在 apache 上托管一组测试数据,例如文本文件、图像,并了解它们的大小。文件名可能是它们的大小,例如 1024bytes.txt。在客户端,您可以发送请求以检索数据并比较响应标头(内容长度)以检查内容的大小。您可以使用 mocha 和 chai 等工具自动执行此操作。

为什么有些用户即使请求了 gzip 压缩包也可能拥有完整的内容?是服务器相关还是客户端相关?如何确保 100% 的用户获得 gzip 压缩的内容?

[Answer] - 您只能从服务器端确保这一点。会有客户端限制和错误。例如https://support.microsoft.com/en-us/help/871205/internet-explorer-may-not-decompress-http-content-when-you-visit-a-web-site。如您所见,Windows 错误可能导致压缩失败。这个或类似的错误可能可以解释为什么您在不同的机器上看到不同的行为。

我们如何解决这个问题?

您可以将您的测试设置与可靠的数据提供商进行比较。在您的情况下,您确实使用 www.bing.com 进行了验证。一旦您确认您的测试设置和客户端使用可靠的来源正常工作,请使用您的 apache 服务器对其进行测试并进行认证。

【讨论】:

    【解决方案2】:

    假设问题是 cmets 中讨论的缓存代理。

    有几个选项。

    1. Apache 可以在内容中添加 http 标头,通知缓存不要存储内容。将以下内容放入您的 VirtualHost 块中

      标头集 Cache-Control "private"

      没有承诺上述内容会起作用,这是一个建议,可能会被代理忽略。

    2. 更可靠的方法是使用 HTTPS,这可以防止几乎所有代理读取主机名以外的任何内容,因此它们不可能充当缓存。 SSL 证书非常便宜,但您可以先使用自签名证书免费测试。

    有创建self signed cert here 的说明,然后复制您的 VirtualHost 块并粘贴一个新块,将端口更改为 443 并添加以下内容:

    <VirtualHost *:443>
    
         .... Existing config
    
         SSLEngine on
         SSLCertificateFile /path/to/your_domain_name.crt
         SSLCertificateKeyFile /path/to/your_private.key
    
    </VirtualHost>
    

    最后一点,我要指出的是,如果一个组织已经实施了缓存代理。这样做的目的可能是提高用户的性能。确定技术变更是否正在提高最终用户的速度的最佳方法是对其进行衡量。 Chrome 开发者工具包括一个网络监视器,其中包括页面加载时间和许多其他有趣的细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2012-08-24
      • 2020-02-01
      相关资源
      最近更新 更多