我们的网络有一个正向代理,即 Squid 2.7。它由第三方为我们管理。
我们最近注意到,从我们的网络到 Web 的 http 请求的Accept-Encoding
标头被删除了。这导致我们网络中的所有 Web 流量(大约 8000 多台 PC)都未压缩,尽管两端的浏览器和服务器都具备压缩功能。
我们已经要求第三方调查此事,他们说这是因为 Squid 2.7 不支持压缩。
我知道这是真的,但我的印象是压缩发生在网络服务器上,而不是代理上。所以...
- Squid 2.7 可以代理和/或缓存经过 gzip 压缩的内容吗?
- 如果可以,那么如何/为什么配置它以致于
Accept-Encoding
删除标题?
答案1
如果用户请求的是压缩页面,Squid 2.7 会缓存压缩页面(一个页面的多个编码)。但如果用户请求的是非压缩页面,那么 Squid 会转发请求非压缩页面的请求,然后缓存该请求。如果请求的是压缩页面,但缓存的是非压缩页面,那么 Squid 会提供非压缩页面。但如果先缓存压缩页面,然后缓存非压缩页面,然后请求压缩页面,那么将从缓存中提供压缩页面。
我发现仅当非压缩页面没有被首先缓存/请求时,squid 才会缓存页面的多种编码,否则非压缩页面将被缓存,并且由于接受编码是有条件的,squid 没有理由获取压缩页面,因为请求可以使用非压缩编码页面。
# TAG: cache_vary
# When 'cache_vary' is set to off, response that have a
# Vary header will not be stored in the cache.
#
#Default:
cache_vary on
需要打开cache_vary,这样页面的多种编码才会被缓存。