Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

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 头,根据其它头字段的变化来创建缓存。
网名:
54.159.71.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^