it-swarm.com.de

Cache-Aktualisierung nach der Bereitstellung erzwingen

Gibt es eine Möglichkeit, den Cache eines Clients zu zwingen, eine HTML-Datei neu zu laden, wenn Sie den URI, der auf diese Datei verweist, nicht ändern können (z. B. keinen Zeitstempel-Parameter hinzufügen können)?

Hier ist meine Situation:

  • Ein Plugin für 1000 Benutzer
  • Dieses Plugin lädt example.com/page.html, das auf script.js aufruft.
  • Der Ressourcen-URI example.com/page.html kann nicht geändert werden (ohne Plugin-Updates)
  • page.html wurde geändert. Ich muss den alten page.html aus dem Cache des Benutzers löschen, damit der neue page.html geladen werden kann.

Irgendwelche Ideen? Htaccess Die PHP - API, die der alte und der neue page.html aufrufen?

Vielen Dank!

18
Kyle

Wenn die Seite bereits von einem Browser zwischengespeichert wird, ist es schwierig zu sagen, dass sie die zwischengespeicherte Version nicht verwenden soll, da sie wahrscheinlich nicht mehr nachprüfen muss, bevor sie feststellt, dass die zwischengespeicherte Version veraltet ist. Sie müssen nur einen Postbrief an alle Benutzer senden, in denen sie aufgefordert werden, Strg + F5 zu drücken.

Es besteht jedoch die Möglichkeit, dass der Browser mindestens eine Anforderung von HEAD versucht, den geänderten Zeitstempel zu überprüfen, bevor er seine zwischengespeicherte Version bedient. In diesem Fall hilft Ihnen das Folgende.

Browser verhandeln ihren Inhalt von Ihrem Webserver mit HTTP-Standard-Headern. Wenn Sie einem Browser mitteilen möchten, dass er eine Datei nicht zwischenspeichern soll, müssen Sie die entsprechenden HTTP-Header senden. Wenn Sie dies in PHP tun möchten, können Sie die header-Funktion verwenden, um die entsprechenden HTTP-Header an den Browser zu senden:

header('Cache-Control: no-cache');
header('Pragma: no-cache');

Wenn dies über HTML erfolgen muss, können Sie im Kopfbereich der Seite Folgendes tun:

<meta http-equiv="Expires" content="Tue, 01 Jan 1995 12:12:12 GMT">
<meta http-equiv="Pragma" content="no-cache">

Sie können jedoch nicht sicher sein, ob der Browser Ihrer Anfrage nachkommt, dass er eine Seite nicht zwischenspeichert. Es gibt einige andere Dinge wie eTags und so weiter, aber ehrlich gesagt glaube ich nicht, dass dies Ihnen helfen wird, wenn die Seite bereits zwischengespeichert ist.


UPDATE

Aus der HTTP/1.1-Spezifikation über Response Cacheability :

Wenn es weder einen Cache-Validator noch eine explizite Ablaufzeit gibt In Verbindung mit einer Antwort erwarten wir nicht, dass sie zwischengespeichert wird, sondern Bestimmte Caches KÖNNEN diese Erwartung verletzen (z. B. wenn wenig oder keine Netzwerkverbindung verfügbar ist).

29
rdlowrey

Vielleicht könnte PHP verwendet werden, um dem Javascript-Aufruf einen Zeitstempel hinzuzufügen. Sie könnten dies dann für die Dauer ausführen ........... Zum Beispiel:

check_if_cache_should_be_disabled.php

<?php
$deployment_flag = true; // Uncomment this if you want to disable normal cache.
//$deployment_flag = false // Uncomment this if you want to enable normal cache.
?>

page.php

<script src="/js/script.js<?php 
require('check_if_cache_should_be_disabled.php');
//  File Get Contents can be used for a remote server
//file_get_contents('http://yourserver.com/check_if_cache_should_be_disabled.php');
if ($deployment_flag == true) {
print ( '?ts='.date() );
}
?>"></script>
4
user2097982

Sie können den Dateinamen ändern, zum Beispiel page_v2.html. Dadurch lädt der Browser die Seite als neue Seite.

0
DeepBlue