Javascript 浏览器使用的缓存没有重新验证
我正在尝试学习浏览器(Chrome/Firefox)的缓存机制。 我设置了一个简单的HTML:Javascript 浏览器使用的缓存没有重新验证,javascript,ajax,caching,browser,Javascript,Ajax,Caching,Browser,我正在尝试学习浏览器(Chrome/Firefox)的缓存机制。 我设置了一个简单的HTML: <HTML><BODY> Hellow World <script> function loadJS(){ var s = document.createElement('script'); s.setAttribute('src','/myscript');
<HTML><BODY>
Hellow World
<script>
function loadJS(){
var s = document.createElement('script');
s.setAttribute('src','/myscript');
document.body.appendChild(s);
}
loadJS()
</script>
<BODY></HTML>
每次我按F5键,看起来浏览器都会检查过期时间,如果未过期,浏览器将直接使用缓存,而不是去服务器进行重新验证
我的问题是:
我对浏览器缓存控制做了大量的实验,我很惊讶没有人给出答案 很多人都没有注意到这一点。结果,网站——毫无理由——让浏览器对未修改的
304
图像、js或css文件执行无用的往返,这些文件在5年内不太可能更改——比如谁会更改jquery.v-什么
总之,我发现当你使用F5或ctrl-r硬刷新浏览器时,Chrome会重新验证页面上的所有内容——这是应该的。这非常有帮助,这就是为什么您希望将etag保留在响应头中
当测试你的“最大年龄”和“过期”标题时,点击页面上的链接,用户自然会浏览网站。观察web服务器的日志文件(我使用的),您将很好地了解浏览器是如何缓存的
设置标题很有效。我不久前发布了以下内容:
对我来说,管理web服务器最简单的方法是创建一个/cache目录,并指示apache为每个子目录中的所有内容设置一个1年最长期限和过期期限头
它创造了奇迹。我的页面往返服务器1次,每次请求都往返3-5次,只是为了得到一个304
像平常一样编写html。浏览器将遵循标题中的缓存设置
只需知道,硬刷新浏览器会导致浏览器忽略最大年龄,并依赖ETag。您如何知道它没有从服务器请求它?您是否从外部程序检查网络?(可能是fiddler?)我使用Chrome的web开发工具来监控网络请求。
setTimeout(loadJS, 1);