我有一个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中强制执行无缓存刷新?
答案 0 :(得分:0)
您可以使用标题“Last-Modified”和“Cache-Control”以及“must-revalidate”来设置缓存。这应该强制浏览器每次都执行“If-Modified-Since”请求。
然后在你的前端你可以每隔X秒重新加载页面,如果没有被修改,你应该从缓存中获取它(瞬时),否则它将加载新页面。
我没有测试过它,但我认为它应该像你想要的那样工作。