2017-06-09 10 views
-1

私はWebsocket、Polymer、ES6、HTML5で書かれたSPAアプリケーションを持っています。これは、JAR内のすべてのものを実行可能なjarファイルとしてパッケージ化されたJetty 9バックエンドによって提供されます。キャッシュをどのように処理すればよいですか?

新しいバージョンのJARをデプロイするときに、すべてのリソースをキャッシュレスでリフレッシュするようにメッセージをクライアントにプッシュするようにしたいと思います。

私は「書き換え」私はURLを処理できるように、私のSPAを提供するためのカスタムHttpServletを持っている:

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

ヘッダー「Last-Modified」と「Cache-Control」と「must-revalidate」を使用してキャッシュを設定できます。これにより、ブラウザは毎回「If-Modified-Since」リクエストを実行する必要があります。

あなたのフロントエンドでは、X秒ごとにページをリロードするだけです。変更されていない場合は、キャッシュから取得する必要があります(瞬時)。そうでない場合は、新しいページが読み込まれます。

私はそれをテストしていませんが、あなたが望むように動作するはずです。

+0

ありがとうございます - これは私が行ったことです - 今のところです。ページロードがあるたびにサーバーに出かける依頼が依然としてあるので、理想的ではありませんが、今のところそれができます:) – Cheetah

関連する問題