web-dev-qa-db-fra.com

html5 meta tag cache-control n'est plus valide?

Comment définir

<meta http-equiv="cache-control" content="no-cache" />

en HTML5? Il n'est plus valide selon le validateur W3C et le documentation .

29
powtac

Mettre des instructions de mise en cache dans des balises META n'est pas une bonne idée, car bien que les navigateurs puissent les lire, les proxys ne le feront pas. Pour cette raison, ils ne sont pas valides et vous devez envoyer des instructions de mise en cache en tant qu'en-têtes HTTP réels.

8
wandarkaf

Il n'y a pas de solution HTML. Le cache d'application de Mozilla (cache.manifest) est obsolète. Le site de cache d'application indique:

Cette fonctionnalité a été supprimée des normes Web. Bien que certains navigateurs puissent toujours le prendre en charge, il est en cours de suppression. Évitez de l'utiliser et mettez à jour le code existant si possible. ... Utilisez plutôt Service Workers.

En dehors de cela, je vous suggère d'utiliser HTTP Cache-Control pour résoudre les problèmes de cache.

6
jonasjacek

Au début du code, vous devez utiliser ceci:

<!DOCTYPE html>
<html manifest="cache.manifest">

...

Créez ensuite un fichier cache.manifest avec le contenu de ce que vous souhaitez mettre en cache, c'est-à-dire

CACHE MANIFEST
# 2010-06-18:v2

# Explicitly cached 'master entries'.
CACHE:
/favicon.ico
index.html
stylesheet.css
images/logo.png
scripts/main.js

# Resources that require the user to be online.
NETWORK:
*

# static.html will be served if main.py is inaccessible
# offline.jpg will be served in place of all images in images/large/
# offline.html will be served in place of all other .html files
FALLBACK:
/main.py /static.html
images/large/ images/offline.jpg

Un manifeste peut avoir trois sections distinctes: CACHE, NETWORK et FALLBACK.

CACHE: Il s'agit de la section par défaut pour les entrées. Les fichiers répertoriés sous cet en-tête (ou immédiatement après le MANIFESTATION CACHE) seront explicitement mis en cache après leur premier téléchargement.

NETWORK: Les fichiers répertoriés dans cette section peuvent provenir du réseau s'ils ne sont pas dans le cache, sinon le réseau n'est pas utilisé, même si l'utilisateur est en ligne. Vous pouvez lister ici des URL spécifiques, ou simplement "", qui autorise toutes les URL. La plupart des sites ont besoin de "".

FALLBACK: Une section facultative spécifiant les pages de secours si une ressource est inaccessible. Le premier URI est la ressource, le second est le repli utilisé si la requête réseau échoue ou fait des erreurs. Les deux URI doivent provenir de la même origine que le fichier manifeste. Vous pouvez capturer des URL spécifiques mais également des préfixes d'URL. "images/large /" capturera les échecs des URL telles que "images/large/que ce soit/img.jpg".

5
mahen3d

Il n'y a pas de solution HTML, car ce n'est pas un problème de balisage. La mise en cache est une action sur la ressource, qui ne fait pas partie de la définition de la ressource elle-même.

Comme d'autres l'ont dit, les en-têtes HTTP sont le meilleur moyen de contrôler les caches, car ils sont observés par tous caches - <meta> les balises ne sont observées que par les caches de navigateur. Ceux-ci doivent être définis par votre serveur/framework Web.

Cela dit, je ne serais pas surpris si les navigateurs observaient toujours <meta http-equiv="cache-control" content="no-cache"> pour les pages avec le doctype HTML5.

1
Stu Cox