[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/API/Request/cache [Back]  [Original]

Request : proprit cache - Les API Web | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

Request : proprit cache

Baseline
Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis janvier 2018.

Note : Cette fonctionnalit est disponible via les Web Workers.

La proprit en lecture seule cache de l'interface Request contient le mode de cache de la requte. Elle contrle la faon dont la requte interagit avec le cache HTTP du navigateur.

Dans cet article

Valeur

Une valeur de type RequestCache. Les valeurs disponibles sont :

  • default Le navigateur recherche une requte correspondante dans son cache HTTP.

    • S'il y a une correspondance et qu'elle est frache, elle sera retourne depuis le cache.
    • S'il y a une correspondance mais qu'elle est prime, le navigateur effectuera une requte conditionnelle vers le serveur distant. Si le serveur indique que la ressource n'a pas chang, elle sera retourne depuis le cache. Sinon, la ressource sera tlcharge depuis le serveur et le cache sera mis jour.
    • S'il n'y a pas de correspondance, le navigateur effectuera une requte normale et mettra jour le cache avec la ressource tlcharge.
  • no-store Le navigateur rcupre la ressource depuis le serveur distant sans d'abord consulter le cache, et ne mettra pas jour le cache avec la ressource tlcharge.

  • reload Le navigateur rcupre la ressource depuis le serveur distant sans d'abord consulter le cache, mais mettra ensuite jour le cache avec la ressource tlcharge.

  • no-cache Le navigateur recherche une requte correspondante dans son cache HTTP.

    • S'il y a une correspondance, frache ou prime, le navigateur effectuera une requte conditionnelle vers le serveur distant. Si le serveur indique que la ressource n'a pas chang, elle sera retourne depuis le cache. Sinon, la ressource sera tlcharge depuis le serveur et le cache sera mis jour.
    • S'il n'y a pas de correspondance, le navigateur effectuera une requte normale et mettra jour le cache avec la ressource tlcharge.
  • force-cache Le navigateur recherche une requte correspondante dans son cache HTTP.

    • S'il y a une correspondance, frache ou prime, elle sera retourne depuis le cache.
    • S'il n'y a pas de correspondance, le navigateur effectuera une requte normale et mettra jour le cache avec la ressource tlcharge.
  • only-if-cached Le navigateur recherche une requte correspondante dans son cache HTTP.

    • S'il y a une correspondance, frache ou prime, elle sera retourne depuis le cache.
    • S'il n'y a pas de correspondance, le navigateur rpondra avec un statut 504 Gateway timeout.

    Le mode "only-if-cached" ne peut tre utilis que si le mode de la requte est "same-origin". Les redirections mises en cache seront suivies si la proprit redirect de la requte est "follow" et que les redirections ne violent pas le mode "same-origin".

Exemples

js
// Tlcharger une ressource en contournant le cache, pour l'ignorer compltement.
fetch("some.json", { cache: "no-store" }).then((response) => {
  /* consommer la rponse */
});

// Tlcharger une ressource en contournant le cache, mais mettre  jour le cache HTTP avec la ressource tlcharge.
fetch("some.json", { cache: "reload" }).then((response) => {
  /* consommer la rponse */
});

// Tlcharger une ressource en contournant le cache avec un serveur correctement configur qui enverra les bons en-ttes ETag et Date et grera correctement les en-ttes de requte If-Modified-Since et If-None-Match, on peut donc se fier  la validation pour garantir une rponse frache.
fetch("some.json", { cache: "no-cache" }).then((response) => {
  /* consommer la rponse */
});

// Tlcharger une ressource en pensant  l'conomie ! Prfrer une rponse en cache mme prime pour conomiser la bande passante.
fetch("some.json", { cache: "force-cache" }).then((response) => {
  /* consommer la rponse */
});

// Implmentation nave client du stale-while-revalidate.
// Prfrer une rponse en cache mme prime ; mais mettre  jour si elle est trop ancienne.
// AbortController et signal pour permettre un meilleur nettoyage mmoire.
// En ralit, ce serait une fonction qui prend un chemin et une rfrence au contrleur car il faudrait changer la valeur
let controller = new AbortController();
fetch("some.json", {
  cache: "only-if-cached",
  mode: "same-origin",
  signal: controller.signal,
})
  .catch((e) =>
    e instanceof TypeError && e.message === "Failed to fetch"
      ? { status: 504 } // Contournement pour Chrome, qui choue avec un TypeError
      : Promise.reject(e),
  )
  .then((res) => {
    if (res.status === 504) {
      controller.abort();
      controller = new AbortController();
      return fetch("some.json", {
        cache: "force-cache",
        mode: "same-origin",
        signal: controller.signal,
      });
    }
    const date = res.headers.get("date"),
      dt = date ? new Date(date).getTime() : 0;
    if (dt < Date.now() - 86_400_000) {
      // si plus vieux que 24 heures
      controller.abort();
      controller = new AbortController();
      return fetch("some.json", {
        cache: "reload",
        mode: "same-origin",
        signal: controller.signal,
      });
    }

    // Autres conditions possibles
    if (dt < Date.now() - 300_000)
      // Si c'est plus vieux que 5 minutes
      fetch("some.json", { cache: "no-cache", mode: "same-origin" }); // pas d'annulation ni de valeur de retour.
    return res;
  })
  .then((response) => {
    /* consommer la rponse (ventuellement prime) */
  })
  .catch((error) => {
    /* Peut tre un AbortError/DOMException ou un TypeError */
  });

Spcifications

Spcification
Fetch
# ref-for-dom-request-cache

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page