Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器使用的缓存没有重新验证_Javascript_Ajax_Caching_Browser - Fatal编程技术网

Javascript 浏览器使用的缓存没有重新验证

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');

我正在尝试学习浏览器(Chrome/Firefox)的缓存机制。 我设置了一个简单的HTML:

    <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键,看起来浏览器都会检查过期时间,如果未过期,浏览器将直接使用缓存,而不是去服务器进行重新验证

我的问题是:

  • 为什么??对此有详细的解释吗
  • 这是否意味着如果我想让浏览器使用缓存并尽可能减少网络请求,我需要等待页面加载,然后稍后通过js请求资源

  • 我对浏览器缓存控制做了大量的实验,我很惊讶没有人给出答案

    很多人都没有注意到这一点。结果,网站——毫无理由——让浏览器对未修改的
    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);