3

我在测试是否通过Apache的mod_deflate gzip对内容进行测试时似乎获得了不同的结果。可靠地测试服务器是否gzip内容

我测试相同的URL和一台PC上我有Content-Encoding:gzip出现在响应头,不同的PC有几乎相同的设置(Windows版本,浏览器版本等),我不和页面加载上更慢和更大的尺寸。两种情况下均存在请求标题Accept-Encoding:gzip, deflate, lzma, sdch, br

  1. 有人可以推荐一种可靠的测试方法,内容是gzipped吗?可靠的我的意思是 - 除了Chrome开发工具。
  2. 为什么有些用户可能会有完整的内容,即使他们要求一个gzipped的内容?它是与服务器相关还是客户端相关?我如何确保100%的用户获得gzip内容?
+0

也许第二台PC在代理服务器后面(可能是透明的),它对头文件做了一些事情。 – wOxxOm

+0

@ wOxxOm,不错的主意,但是当我测试另一个网址时(例如google.com),结果是一样的,两台PC都会得到gzipped – skip405

+1

坚持使用代理建议尝试不使用https的网站,因为这通常会阻止代理从阅读内容。或许。[bing](http://www.bing.com/)。 –

回答

2

有人可以推荐一种可靠的测试方法,内容是gzipped吗?我的意思是说 - 除了Chrome开发工具。

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

如果内容是文本,压缩比率将是3:1或更多。但是,如果你发送一个压缩的图像,它会少得多。无论如何,如果压缩工作,它将大于1:1。

对于测试设置,您可以托管一组测试数据,如文本文件,apache上的图像以及其大小的知识。可能是文件的名称可能是它们的大小,如1024bytes.txt。在客户端,您可以发送请求来检索数据并比较响应头(Content-Length)以检查内容的大小。您可以使用诸如摩卡&柴等工具自动执行此操作。

为什么有些用户可能会有完整的内容,即使他们要求一个gzipped的?它是与服务器相关还是客户端相关?我如何确保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 bug会导致压缩失败。这个或类似的错误可能可以解释为什么你在不同的机器上看到不同的行为。

我们如何解决这个问题?

您可以将您的测试设置与可靠的数据提供者进行比较。就你而言,你确实通过www.bing.com进行了验证。一旦您确认了您的测试设置和客户端可以正常使用可靠的源,请使用您的apache服务器进行测试并进行认证。

1

假设问题是评论中讨论的高速缓存代理。

有几个选项。

  1. Apache可以向通知缓存不存储内容的内容添加http头。把下面的到你的虚拟主机块

    页眉设置缓存控制的“私人”

    没有承诺,将上面的工作,它可以通过代理忽视的咨询。

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

有创建self signed cert here然后复制您的虚拟主机块粘贴一个新的改变端口设置为443,增加了以下说明:

<VirtualHost *:443> 

    .... Existing config 

    SSLEngine on 
    SSLCertificateFile /path/to/your_domain_name.crt 
    SSLCertificateKeyFile /path/to/your_private.key 

</VirtualHost> 

最后一点,我想指出,如果组织实施了缓存代理。这样做的目的可能是提高用户的性能。要知道技术变革是否能提高最终用户的速度,最好的方法就是衡量它。 Chrome开发人员工具包括网络监视器,其中包含页面加载时间和其他许多有趣的细节。

相关问题