Je partage des URL via Facebook et Whatsapp. Ces applications de messagerie ont tendance à générer un "aperçu riche" sous la forme d'une miniature pour le lien partagé. Tout semble bien fonctionner jusqu'à présent
Mais si je modifie le contenu vers lequel pointe mon lien, la prochaine fois que je partagerai le même lien avec une personne complètement différente, les modifications ne seront pas reflétées! Cela s'applique aux miniatures de prévisualisation riches à la fois sur Facebook et sur WhatsApp. La nouvelle personne à qui j'ai envoyé un message voit toujours l'ancienne vignette que l'utilisateur précédent a reçue de moi.
Par exemple, voici un instantané de la vignette rendue par les applications de messagerie après l'envoi d'un message contenant un lien à ALICE:
Et voici un instantané d'une autre vignette rendue par les applications de messagerie après avoir modifié le contenu vers lequel mon lien pointe. J'ai changé le nom en Pro3 et le prix en 549 et envoyé un nouveau message à BOB ... mais BOB voit la même prévisualisation en miniature qu'ALICE!
Ma solution préférée consiste à utiliser les balises Cache-Control
et Pragma
(conformément aux normes Web) pour désactiver le cache, mais cela ne semble pas fonctionner.
Voici mon 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 + '">' +
Quelqu'un peut-il s'il vous plaît suggérer une autre approche qui vaille la peine d'essayer ou m'aider à corriger tout ce que je peux faire de mal avec l'approche actuelle?
Je pense que ce problème est relatif à Facebook et à Whatsapp CDN ...
Apparemment, sur Facebook, vous pouvez utiliser l'outil de débogage et forcer Facebook à actualiser l'URL mise en cache. (peut-être utiliser l'API pour forcer l'actualisation), mais je n'ai pas trouvé cette option sur Whatsapp ...
La meilleure solution est l'une de vos "pas bonnes solutions":
Changer l'URL
qui oblige implicitement le CDN à re-mettre en cache/mettre à jour le nouveau contenu.
Vous n'avez pas besoin d'ajouter la balise méta no-cache
dans vos codes pour contrôler la méthode de mise en cache, c'est en quelque sorte une mauvaise solution liée aux performances en standard (doit mettre en cache ce dont nous avons besoin pour mettre en cache).
Dans ce cas, je pense que vous devriez empêcher les caches juste pour ce dont vous avez besoin seulement. Vous pouvez enfin ajouter le contrôle de version comme horodatage. Quelque chose comme ça:
<meta property="og:image" content="' + metaData.imageUrl + '?v=' + timestamp + '" />\n
Allez-y de cette façon, le fichier sera re-téléchargé chaque fois que votre application sera chargée car, pour le comprendre, le fichier est toujours nouveau. Comme je l'ai dit ci-dessus, ajoutez simplement dans votre balise méta ce dont vous avez besoin pour éviter la mise en cache.
Il n'y a pas de solution simple à cela. Cela revient à contrôler ce que quelqu'un d'autre fait avec votre URL. Vous voulez qu'ils vous grattent chaque fois que vous partagez une URL, mais que le service de partage souhaite mettre en cache des informations, afin que les ressources soient sauvegardées de leur côté pour pouvoir les récupérer.
Alors que peux-tu faire?
?_=<epochtim>
pour le faire. Cela fonctionnera aussi sur votre URL raccourcie302 Temporary Redirect
décourager le service de mettre l’URL en cache. Donc, dans ce cas, vous aurez l'URL http://site/r/<path>
et il devrait en résulter un 302 with
http: // site/ ? _ = `. Si l’on examine les 302 sites qui décident de recommencer, l’approche pourrait aiderIl n’ya pas de solution infaillible ici et je ne pense pas que l’on puisse en attendre une