代理缓存存在gzip的问题

存在问题:
假设第一个url不支持gzip,因为他是第一个url请求。此时代理缓存数据为空,因此会将请求代理到服务器去。服务器返回一份不支持gzip的缓存数据给浏览器。同时代理服务器会缓存一份未压缩的数据。当第二个支持gzip的请求访问的时候,代理服务器发现该url已经由换成数据了。就会直接将缓存数据返回给浏览器。这样第二次请求就失去了gzip的支持。
如果第一个请求支持gzip,第二个请求不支持gzip的话。那第二次请求不支持gzip,也会获取gzip的数据。
解决办法:
在web服务器的响应中添加vary头,web服务器可以告诉代理,根据一个或多个请求头来缓存数据,因此,需要在服务器的vary响应头中包含accept-encoding。
这将使得代理服务器缓存多个版本,每个accept-encoding请求头的每一个值缓存一份。
默认情况下mod_gzip会像所有响应添加vary:accept encoding
可以使用vary:*和cache-control:private头来禁用代理缓存。
nginx 添加方式
add_header Vary *;
add_header Cache-control private;

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注