HTTP 的 Vary 头与缓存

     HTTP 缓存我想大家应该都知道,但到底什么范围才算一个缓存其实是很难界定的。最简单的方法是通过 URL 来区分,将每个不同的 URL 视为不同的页面,对这些页面分别做缓存。可是有些页面是根据 Cookie 输出不同内容的,那就不能根据 URL 来缓存。
   下面这个示例程序输出一个设置了 Cache 的页面,页面中会输出当前 Cookie,并且前端程序会不断刷新 Cookie。 <?php
header('Cache-Control: max-age=86400');
// header('Vary: Cookie');
print_r($_COOKIE);
?>
<a href="?">从链接进入这个页面是会走 Cache 的</a>
<script>
document.cookie = 'now=' + Date.now();
</script>   

        点击页面上的链接刷新页面时页面会从 Cache 载入,所以纵然这个页面是输出当前 Cookie,由于走了 Cache,而且这个 Cache 是根据 URL 的,URL 不变化的话页面上显示的内容就总是不更新。如果把上面 PHP 代码中的注释去掉,指定响应头中的 Vary 为 Cookie,那么 Cache 就不仅根据 URL,还根据 Cookie 变化来建立,于是点击链接也可以刷新显示。
   

       以上就是 Vary 的作用,当然这并不是全部。比如请求头中也可以包含 Vary,那么服务器端在做缓存时也应该读取 Vary 做适当的调整。上面例子中使用 Cookie 也只是个例子,Vary 可以指定其它 HTTP 头,根据其它头字段的变化来创建缓存。罗建博客分享。

你可能感兴趣的:(seo,网络营销)