我通过Facebook和Whatsapp分享网址。这些消息传递应用程序倾向于生成丰富的预览"以共享链接的缩略图的形式。到目前为止,一切似乎都运作良好
但是,如果我更改链接指向的内容,那么下次与完全不同的人共享相同的链接时,更改不会反映出来!这适用于Facebook和WhatsApp中的丰富预览缩略图。我发送消息的新人仍然看到上一个用户从我那里收到的旧缩略图。
例如,以下是我发送给ALICE的带有链接的消息后,消息传递应用程序呈现的缩略图的快照:
这是我编辑链接指向的内容后,消息传递应用程序呈现的另一个缩略图的快照。我将名称更改为Pro3并将价格更改为549并向BOB发送了一条新消息...但是BOB看到了与ALICE相同的缩略图预览!
我首选的解决方案是使用Cache-Control
和Pragma
标记(根据网络标准)来禁用缓存,但它似乎无法正常工作。
这是我的代码
'<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 + '">' +
有人可以建议另一种值得尝试的方法,或者帮助我解决当前方法可能出错的问题吗?
答案 0 :(得分:2)
我希望这个问题与Facebook和Whatsapp CDN相关......
显然在Facebook上你可以使用the debugger tool并强制Facebook刷新它已缓存的网址。 (可能使用API来强制刷新),但我没有在Whatsapp上找到这个选项...
最佳解决方案是您的“不好的解决方案”:
更改网址
强制CDN重新缓存/更新新内容。
答案 1 :(得分:2)
您不需要在代码中添加no-cache
元标记来控制缓存方法,不知何故,这是与标准性能相关的错误解决方案(应该缓存我们需要缓存的内容)。 / p>
在这种情况下,我认为你应该只为你需要的东西阻止缓存。您最后可以将版本控制添加为时间戳。像这样:
<meta property="og:image" content="' + metaData.imageUrl + '?v=' + timestamp + '" />\n
这样,只要你的应用程序被加载,就会重新下载文件,因为在理解的情况下,文件总是新的。如上所述,只需添加到您需要避免缓存的元标记中。
答案 2 :(得分:1)
没有简单的解决方法。这就像控制其他人对您的URL做了什么。您希望他们在每次共享URL时抓住您,但共享服务会想要缓存信息,以便将资源保存在他们的端点以获取资源
那你能做什么?
?_=<epochtim>
来执行此操作。这也适用于缩短的网址302 Temporary Redirect
阻止服务缓存网址。因此,在这种情况下,您将拥有网址http://site/r/<path>
,它应该会导致302 with
http://site/?_ =`。如果看着302这些网站决定再次刮,那么这种方法可以帮助这里没有万无一失的解决方案,我认为人们不能指望一个