我该如何处理缓存?

时间:2017-06-09 11:51:41

标签: javascript java caching

我有一个SPA应用程序,用Websocket,Polymer,ES6,HTML5编写。这是由Jetty 9后端提供的,后端打包成一个可运行的jar,绝对是JAR中的所有内容。

我希望这样,当部署新版本的JAR时,我会向客户端发送一条消息,强制它对所有资源进行无缓存刷新。

我有一个自定义HttpServlet来提供我的SPA,以便我可以处理网址"重写":

private static final Path ROOT = getDevelopmentWebRoot();

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String requestPath = req.getPathInfo();

    if (requestPath.equals("/")) {
        requestPath = "index.html";
    } else {
        requestPath = requestPath.substring(1);
    }

    Path resource = ROOT.resolve(requestPath);

    resp.setHeader("Cache-Control", "max-age=31536000");
    resp.setContentType(MimeTypes.getDefaultMimeByExtension(resource.toString()));

    try {
        Files.copy(resource, resp.getOutputStream());
    } catch (NoSuchFileException e) {
        Files.copy(ROOT.resolve("index.html"), resp.getOutputStream());
    }
}

我想我的问题是,如何在javascript中强制执行无缓存刷新?

1 个答案:

答案 0 :(得分:0)

您可以使用标题“Last-Modified”和“Cache-Control”以及“must-revalidate”来设置缓存。这应该强制浏览器每次都执行“If-Modified-Since”请求。

然后在你的前端你可以每隔X秒重新加载页面,如果没有被修改,你应该从缓存中获取它(瞬时),否则它将加载新页面。

我没有测试过它,但我认为它应该像你想要的那样工作。