web-dev-qa-db-fra.com

Cachée de réponse HTTP

Je tiens à nous assurer que la réponse de ma servëte n'est jamais mise en cache par le Broswer, de sorte que même si deux demandes identiques sont faites (une nanoseconde à part), le serveur est toujours contacté. Est-ce la bonne façon d'y parvenir:

class MyServlet extends HttpServlet {

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

Merci, don

22
Dónal

Non, ce n'est pas la bonne façon. Voici la bonne façon:

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.

Vous verrez probablement quelqu'un d'autre suggérant d'autres entrées/attributs, mais ceux-ci sont complètement non pertinents lorsque au moins ce qui précède est mentionné.

N'oubliez pas d'effacer le cache de votre navigateur avant de tester après le changement.

Voir également:

62
BalusC

Nous utilisons:

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

Selon Microsoft, ces en-têtes sont nécessaires pour IE:

  • mise en cache-contrôle;
  • pragma;
  • expire (cela devrait être négatif);

Exemple:

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