在阅读Cache-Control
了HTTP标头的字段后,
据我所知,Cache-Control
在HTTP响应报头(服务器到客户端)字段指定如何处理该响应的中间代理服务器/客户浏览器中的指令,通过发送不同的值Cache-Control
字段:private
,public
,no-cache
,或no-store
在响应报头中.
但我不明白为什么我们需要Cache-Control
在请求标头(客户端到服务器)中发送属性?
我想确保通过AJAX调用请求的数据是新鲜的而不是缓存的.因此我发送标题Cache-Control: no-cache
但是,Cache-Control: max-age=0
如果用户按下F5,我的Chrome版本33会覆盖此标题.
例.test.html
在您的网络服务器上放置内容
<script>
var xhr = new XMLHttpRequest;
xhr.open('GET', 'test.html');
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.send();
</script>
Run Code Online (Sandbox Code Playgroud)
在网络选项卡上的chrome调试器中,我看到了test.html AJAX调用.状态代码200.现在按F5重新加载页面.max-age:0,状态代码304 Not Modified.
Firefox显示了类似的行为.刚刚覆盖请求头的Intead将其修改为Cache-Control:无缓存,F5上的max-age = 0.
我可以压制这个吗?
在我制作的网站上,我通常使用查询字符串参数使css和js的缓存无效.像这样:
注意:这是chrome检查器的屏幕截图,这些查询字符串全部由我在渲染到浏览器时制作的一个小系统自动附加.
一位朋友现在告诉我,使用查询字符串不会像文件名本身或文件名之前的路径中的某个位置那样缓存.他还发了一篇文章,在这里他们主要谈论人们使用代理时的糟糕表现.
但是,这篇文章是8岁.我想知道,它仍然是一个有效点吗?我应该关心吗?这真的是一种不好的做法吗?
干杯,
Wouter