web-dev-qa-db-ja.com

HTTP応答キャッシング

サーブの応答がブラウザによってキャッシュされないようにしたいので、2つの同じ要求が行われた場合(ナノ秒間隔)でも、サーバーには常に接続されます。これはこれを達成する正しい方法ですか?

class MyServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        response.setHeader("Cache-Control", "no-cache");
    }
}

ありがとう、ドン

22
Dónal

いいえ、それは正しい方法ではありません。これが正しい方法です:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

おそらく他の誰かが他のエントリ/属性を提案しているのを見ることでしょうが、少なくとも上記が言及されている場合、それらは完全に無関係です。

変更後のテストの前に、ブラウザのキャッシュをクリアすることを忘れないでください。

以下も参照してください。

62
BalusC

を使用しております:

    // HTTP 1.1
    response.setHeader("Cache-Control", "private, no-store, no-cache, must-revalidate");
    // HTTP 1.0
    response.setHeader("Pragma", "no-cache");
3
rsp

Microsoftによると、IEには次のヘッダーが必要です。

  • キャッシュ制御;
  • プラグマ;
  • 有効期限(負の値でなければなりません);

例:

Pragma: no-cache
Cache-Control: no-cache
Expires: -1
1
Kurt Du Bois