Ich teile URLs über Facebook und WhatsApp. Diese Messaging-Apps generieren in der Regel eine "reichhaltige Vorschau" in Form einer Miniaturansicht für den freigegebenen Link. Alles scheint soweit gut zu funktionieren
Ändere ich jedoch den Inhalt, auf den mein Link verweist, und wenn ich das nächste Mal denselben Link mit einer völlig anderen Person teile, werden die Änderungen nicht reflektiert! Dies gilt für umfangreiche Vorschaubilder in Facebook und WhatsApp. Die neue Person, die ich mitgemeldet habe, sieht immer noch die alte Miniaturansicht, die der vorherige Benutzer von mir erhalten hat.
Hier ist zum Beispiel eine Momentaufnahme der Miniaturansicht, die von den Messaging-Apps gerendert wird, nachdem eine Nachricht mit einem Link von mir an ALICE gesendet wurde:
Und hier ist eine Momentaufnahme einer anderen Miniaturansicht, die von den Messaging-Apps nach dem Bearbeiten des Inhalts, auf den mein Link verweist, gerendert wird. Ich habe den Namen in Pro3 und den Preis in 549 geändert und eine neue Nachricht an BOB gesendet ... aber BOB sieht die gleiche Miniaturansicht wie ALICE!
Meine bevorzugte Lösung ist die Verwendung von Cache-Control
- und Pragma
-Tags (gemäß Webstandards) zum Deaktivieren des Caches, aber es scheint nicht zu funktionieren.
Hier ist mein Code
'<title>' + metaData.title + '</title>' +
'<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">\n' +
'<meta http-equiv="Pragma" content="no-cache">\n' +
'<meta http-equiv="Expires" content="0">\n' +
'<meta http-equiv="refresh" content="0; url=http://my.site.com/my/products">' +
'<meta name="description" content="' + metaData.description + '" />\n' +
'<meta property="og:type" content="product" />\n' +
'<meta property="og:title" content="' + metaData.title + '" />\n' +
'<meta property="og:description" content="' + metaData.description + '" />\n' +
'<meta property="og:image" content="' + metaData.imageUrl + '" />\n' +
'<meta property="og:image:width" content="' + metaData.imgWidth + '"/>\n' +
'<meta property="og:image:height" content="' + metaData.imgHeight + '" />\n' +
'<meta property="og:image:alt" content="' + metaData.imgAlt + '"/>' +
'<meta property="og:url" content="' + metaData.url + '" />\n' +
'<meta name="og_site_name" property="og:site_name" content="' + metaData.domainName + '" />' +
'<meta name="keywords" content="' + metaData.keywords + '">' +
Kann jemand bitte einen anderen Ansatz vorschlagen, der einen Versuch wert ist, oder mir helfen, das zu korrigieren, was ich mit dem aktuellen Ansatz falsch mache?
Ich gehe davon aus, dass dieses Problem relativ zu Facebook und Whatsapp CDN ... ist.
Anscheinend können Sie auf Facebook das Debugger-Tool verwenden und Facebook zwingen, die zwischengespeicherte URL zu aktualisieren. (Vielleicht API verwenden, um die Aktualisierung zu erzwingen), aber ich habe diese Option bei WhatsApp nicht gefunden ...
Die beste Lösung ist eine Ihrer "Nicht guten Lösungen":
URL ändern
welche zwingen das CDN implizit, den neuen Inhalt neu zu zwischenspeichern/zu aktualisieren.
Sie müssen das no-cache
-Metatag nicht in Ihre Codes einfügen, um die Cachemethode zu steuern. Irgendwie ist dies eine schlechte Lösung für die Leistung als Standard (sollten Caches die Caches enthalten).
In diesem Fall denke ich, sollten Sie die Caches nur für das, was Sie nur brauchen, verhindern. Sie können die Versionierung zuletzt als Zeitmarke hinzufügen. Etwas wie das:
<meta property="og:image" content="' + metaData.imageUrl + '?v=' + timestamp + '" />\n
Gehen Sie auf diese Weise vor, wird die Datei jedes Mal erneut heruntergeladen, wenn Ihre App geladen wird, da die Datei immer neu ist. Wie bereits gesagt, fügen Sie einfach in Ihr Meta-Tag das hinzu, das Sie benötigen, um das Caching zu vermeiden.
Dafür gibt es keine einfache Lösung. Dies ist wie das Kontrollieren, was andere Personen mit Ihrer URL machen. Sie möchten, dass sie Sie jedes Mal kratzen, wenn Sie eine URL freigeben, der Freigabedienst möchte jedoch Informationen zwischenspeichern, so dass Ressourcen an ihrem Ende zum Abrufen der Ressourcen gespeichert werden
Also, was kannst du machen?
?_=<epochtim>
hinzu. Dies funktioniert auch bei Ihrer verkürzten URL302 Temporary Redirect
sehen, dass der Dienst davon abgehalten wird, die URL zwischenzuspeichern. In diesem Fall haben Sie die URL http://site/r/<path>
und dies sollte einen 302 with
http: // site/ ? _ = `Verursachen. Wenn man sich die 302 ansieht, entscheiden sich diese Standorte für ein erneutes Abkratzen, dann könnte der Ansatz helfenEs gibt hier keine narrensichere Lösung und ich glaube nicht, dass man eine erwarten kann