我正在从一个S3桶中提供我的all应用程序的所有图像。问题是,如果我通过Java SDK更新文件,由于缓存的原因,网站不会刷新图像。
我知道缓存是一件非常好的事情。我的问题是,我公开了一个文章目录,图像是由它们的文章代码命名的。例如,文章ABC101的图像是abc101.jpg;所以重命名图像对我来说不是一个选择。
我根本不想超过缓存,只有当图像更新时。
我如何才能做到这一点?镜像几乎每天更新,由于这个问题,用户无法看到新的镜像。
发布于 2018-02-24 03:30:53
根据您的应用程序,缓存图像可能是一件好事:页面加载将更快,它减少了流量,等等。
在处理缓存时,您所能做的最好的事情就是向下游“推荐”您希望您的图像缓存多长时间。但请记住,你没有办法强迫他们服从你的“建议”。
因此,与其试图“击败”缓存,不如(a)拥抱缓存并将其用于您的优势,以及(b)在S3中更新图像名称时更改它们。
Cache-Control,maxage,s-maxage等,故意让你的图像在缓存中有很长的生命周期。这将减少页面加载时间,当你的图像没有updated.然而,如果你坚持“击败”缓存,你能做的最好的就是给你的图像一个非常短的(例如。0秒)使用缓存头的缓存寿命。但如果您这样做,他们将不断下载和重新下载图像时,他们没有改变。
发布于 2018-02-24 05:51:04
您可以通过在urls中添加未使用的参数来解决此问题,例如,将img src="myimage.jpg“改为myimage.jpg?v=20180223 (例如)
很可能你可以自动生成这个url‘版本’号。例如,对于我支持的大型asp.net应用程序,我们使用了内部版本号。每次将构建推送到生产环境时,都会以编程方式更新?v=xxxxx参数;您可以为您的特定设置定制该策略。
包含额外的参数将迫使浏览器请求最新的图像,并将其缓存,直到“版本”更改。
https://stackoverflow.com/questions/48954753
复制相似问题