Chrome的应用缓存不会更新文件,即使它说:应用缓存下载事件

时间:2015-11-20 11:16:47

标签: intellij-idea jetty html5-appcache

我已在我的网络应用中配置了应用缓存清单,Chrome检测到内容何时更改,触发"应用缓存下载事件"但内容未更新。

它有什么用?

1 个答案:

答案 0 :(得分:0)

我可以阅读here

  

应用程序是一个额外的缓存,而不是替代的一个   当浏览器更新ApplicationCache时,它会像往常一样请求URL。它遵循常规的缓存说明:如果一个项目的标题显示“假设我在2022年4月1日之前表现良好”,浏览器将认为资源确实是好的,直到2022年4月1日,并且不会给服务器带来更新的麻烦。   这是一件好事,因为您可以使用它来减少浏览器在清单更改时需要进行的请求数量。   如果他们的服务器不提供缓存标头,这可以在他们进行实验时将人们赶出去。没有细节,浏览器会猜测缓存。您可以更新whatever.html和清单,但浏览器不会更新该文件,因为它“猜测”它不需要更新。   您提供的所有文件都应具有缓存标头,这对清单中的所有内容和清单本身尤为重要。如果文件很可能更新,则应该使用no-cache。如果文件不经常更改必须重新验证是一个更好的选择。例如,must-revalidate是清单文件本身的一个很好的选择。哦,虽然我们正在谈论这个问题......

现在我想我必须为我服务器上的所有文件启用no-cache标头,并且仅依赖于appcache,但是

  1. 如何在本地intellij网络服务器中启用无缓存标头?
  2. 回答:intellij无法从内置服务器中禁用客户端缓存,但您可以通过chrome执行此操作:Disabling Chrome cache for website development

    1. 如何使用jetty-runner在我的服务器中启用no-cache标头?
    2. 回答:根据this,您应该修改webdefault.xml

      <!--
      <init-param>
            <param-name>cacheControl</param-name>
            <param-value>no-cache,public</param-value>
      </init-param>
      -->
      

      但是将它放在web.xml文件中会更容易:

      <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
        <init-param>
          <param-name>cacheControl</param-name>
          <param-value>no-cache,public</param-value>
        </init-param>
      </servlet>