Une fois qu'un document HTML a un manifeste (cache.manifest), comment pouvez-vous retirer?

StackOverflow https://stackoverflow.com/questions/4542299

  •  13-10-2019
  •  | 
  •  

Question

Il semble qu'une fois que vous avez une entrée manifeste, à la:

<html manifest="cache.manifest">

Ensuite, cette page (l'entrée de maître dans le cache) sera toujours mis en mémoire cache (au moins par Safari) jusqu'à ce que l'utilisateur fait quelque chose pour enlever le cache, même si vous supprimez ultérieurement l'attribut manifeste de la balise html et mettre à jour le manifeste (en changeant quelque chose en elle), forçant l'entrée principale à être rechargées avec tout le reste.

En d'autres termes, si vous avez:

  • index.html (avec manifeste défini)
  • file1.js (référencé dans le manifeste)
  • file2.js (référencé dans le manifeste)
  • cache.manifest (liste les deux js fichiers)

- suppression de l'entrée manifeste de index.html et de modifier le manifeste (il arrive à expiration par le navigateur et tout le contenu rechargées) ne s'arrêtera cette page de se comporter comme si elle est encore entièrement mis en mémoire cache. Si vous affichez la source sur index.html vous ne verrez plus la liste du manifeste, mais le navigateur demanderez encore que le fichier cache.manifest, et à moins que le contenu de ce fichier est modifié, aucune autre modification des fichiers seront affichés à la utilisateur.

Il semble comme un bug assez flagrant, et il est présent sur iOS ainsi que les versions Mac de Safari. Quelqu'un at-il trouvé un moyen de remettre à zéro la page et de se débarrasser du cache sans intervention de l'utilisateur?

Était-ce utile?

La solution

Ive fait des recherches sur la même question, et il ne marche pas semble être un api à:

  1. trigger dynamiquement une page mise en mémoire cache
  2. dynamiquement la cause d'une page de cesser d'être mis en mémoire cache.

Voici les meilleures ressources que j'ai trouvé:

http://www.html5rocks.com/tutorials/appcache/beginner/

http://www.thecssninja.com/javascript/how -à-créer-hors ligne webapps-on-the-iphone

cette citation du premier lien en particulier:

  

Si le fichier manifeste ou une ressource spécifiée en elle ne parvient pas à télécharger, la mise à jour entière échoue. Le navigateur continuera à utiliser l'ancienne cache de l'application en cas d'échec d'un tel.

Dans le cas contraire, il n'y a pas de nulle part mention au sujet de déchargement du cache.

Il semble suggérer que vous ne pouvez pas forcer une erreur pour l'obtenir à uncache. Cependant, comme il est indiqué ci-dessous, la spécification indique que si une erreur se produit lors du téléchargement du fichier manifeste, sera supprimé l'intégralité du cache.

Dans google chrome, l'utilisateur peut accéder à l'URL suivante:

chrome: // AppCache-internals /

et désactiver manuellement le cache. Bien sûr, la prochaine fois qu'ils visitent la page, il sera remis en cache si la page a l'ensemble de la propriété manifeste.

Si vous regardez la spécification: 5.6 Hors ligne applications Web

Il semble suggérer une situation où le cache est supprimée. Plus précisément, l'article 5.6.4.5:

  

Si la récupération du manifeste échoue en raison d'une réponse 404 ou 410 ou équivalent, puis exécutez ces sous-étapes:   groupe cache Marquer comme obsolète. Ce groupe de cache n'existe plus à des fins autres que le traitement des documents objets déjà associé à un cache d'application dans le groupe de cache.   Si le groupe de cache dispose d'un cache d'application dont l'indicateur complet est incomplet, puis jeter ce cache de l'application.

Il dit alors:

  

Si cela était une tentative de cache, groupe défausse cache tout à fait.

En fait, si la demande pour le cache des résultats de fichier manifeste dans un 404, puis l'ensemble du cache doit être mis au rebut. Alors, avez-vous essayé d'avoir le serveur renvoie une erreur 404 ou 410 lorsque le fichier cache manifeste est demandé? Cela devrait fonctionner. L'astuce est de ne retourner que 404/410 pour les pages que vous souhaitez supprimer le manifeste de (peut-être en utilisant des paramètres d'URL?).

Autres conseils

Une solution possible:

  • modifier le manifeste (de sorte que les rechargements)
  • modifier le fichier maître (index.html) pour faire référence à un manifeste inexistante, de sorte qu'il devient un 404

A peine élégant, mais il semble fonctionner. Le principal problème est alors que vous êtes coincé avec cette 404 générant l'entrée manifeste faux jusqu'à ce que tout le monde qui n'a jamais été à votre site est de retour et a leur cache effacé.

Il doit y avoir une meilleure façon ...

Essayez de supprimer simplement le fichier manifeste. Des Mozzila docs:

  

caches d'applications peuvent également devenir obsolète. Si le manifeste est supprimé du serveur, le navigateur supprime toutes les caches d'application que l'utilisation qui manifeste, envoie alors un événement « obsoleted » à l'objet de cache de l'application. Ensuite, l'état du cache de l'application est définie sur Obsolète.

Cela a également travaillé pour moi sur le chrome.

Une solution, si vous utilisez IIS 7 est de supprimer le type Mime pour le type de fichier .manifest ou .appcache que vous avez ajouté pour activer la mise en cache. Vous pouvez toujours ajouter ce retour lorsque vous souhaitez activer à nouveau la mise en cache. Voilà ce que je l'ai fait pour moi corriger.

Ce que nous faisons est de supprimer la liste des fichiers contenus dans le manifeste, il se distingue par le fichier ne sera mis en mémoire cache.

Il fonctionne pour nous.

Cela peut être vieux mais nous espérons encore utile à quelqu'un.

Jetez un oeil à vos en-têtes HTTP dans les propriétés IIS. Jetez un oeil à activer ou désactiver l'expiration du contenu. Il se pourrait que IIS fait encore le cache.

Pour des raisons de développement (change constants), ce que nous avons fait est:

  1. Définir un Fichier- -cache manifeste dans votre langue côté serveur, par exemple, nous utilisons PHP, notre cache de développement est appelé « cache.manifest.php » et il a la même façon dans la balise html comme ceci:

    <html manifest="cache.manifest.php">
    
  2. Mettez une chaîne dependent- -temps (ou quelque chose d'autre que vous suites) quelque part dans votre manifeste comme un commentaire (# ---), de sorte que le fichier est différent à chaque fois dans un certain temps (navigateur semble comparer le contenu de manifeste, et non la date), par exemple cette chaîne change manifeste chaque minute, de cette façon tous les fichiers seraient re-mises en cache si la visite est dans une autre minute que la dernière fois.

    <?php if($dev) echo date("Y-m-d H:m"); ?>
    

Nous avons testé cette procédure juste en utilisant Chrome, espérons que cela fonctionne dans d'autres, mais sinon vos commentaires et vos conseils seraient très bien apprécié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top