情景
我正在为通信应用程序构建自定义 CMS。用户可以将图像上传到服务器,然后在他们使用 Markdown 编写的帖子中引用它们。图像存储在数据库中,并以 url 形式引用images/{id}
。自定义图像处理程序检索这些并设置远期过期标头,因此不会一遍又一遍地获取它们。将图像存储在文件系统中不是每个客户的选择。
帖子以降价和 html 形式存储在数据库中以提高性能。
降价
###Header
Lorem Ipsum dolor sit amet. 
HTML
<h3>Header</h3>
<p>
Lorem Ipsum dolor sit amet. <img alt="funny cat" src="images/25" />
</p>
问题
这些图像也是可编辑的。从缓存的角度来看,这提出了一个问题。编辑图像时,我需要确保浏览器获取最新版本。我提出了以下解决方案,我发现所有这些解决方案都缺乏。
可能的解决方案
版本字段
使用图像存储版本字段。当图像被编辑产生形式的 url 时增加它images/{id}/version/{version}
。
如果图像 url 总是从数据库生成,这很好。但是,我将 url 作为文本存储在帖子中,并且必须为这些请求预处理可能的大量文本。此外,链接图像会很麻烦,因为在编辑图像后 url 会变得陈旧。这可能不是一个好主意。
新网址
编辑图像时,将其作为新条目存储在数据库中。
这意味着没有版本维护,但旧链接和旧帖子会遇到同样的问题。他们永远不会更新。性能会很好,但问题仍然存在。
304 - 未修改
存储每个图像的最后编辑字段。当有条件请求返回时,返回 http 状态 304 - 未修改,减少带宽使用。
这似乎是迄今为止我得到的最好的解决方案。除非经过编辑,否则图像会被缓存,但我以前从未使用过这种方法。如果页面上有 50 张图像,则仍有 50 个请求向服务器发送。带宽将减少,但延迟仍然存在。这种方法值得付出这样的代价吗?
问题
我在这方面的经验很少,我希望你们所有人都有更多。上述任何解决方案是否可行?如果是这样,您对他们的体验如何?如果不是什么是更好的方法?