Html 自定义图像处理程序:缓存策略 情景

Html 自定义图像处理程序:缓存策略 情景,html,http,caching,httphandler,Html,Http,Caching,Httphandler,我正在为通信应用程序构建自定义CMS。用户可以将图像上传到服务器,然后在他们使用降价写的帖子中引用它们。图像存储在数据库中,并使用Images/{id}格式的url引用。自定义图像处理程序检索这些文件,并设置一个遥远的未来expires头,这样就不会一次又一次地获取这些文件。将图像存储在文件系统中不是每个客户的选项 为了提高性能,文章以降价和html的形式存储在数据库中 降价 HTML 标题 Lorem Ipsum dolor sit amet。 问题 这些图像也是可编辑的。从缓存的角度来

我正在为通信应用程序构建自定义CMS。用户可以将图像上传到服务器,然后在他们使用降价写的帖子中引用它们。图像存储在数据库中,并使用
Images/{id}
格式的url引用。自定义图像处理程序检索这些文件,并设置一个遥远的未来expires头,这样就不会一次又一次地获取这些文件。将图像存储在文件系统中不是每个客户的选项

为了提高性能,文章以降价和html的形式存储在数据库中

降价 HTML
标题

Lorem Ipsum dolor sit amet。

问题 这些图像也是可编辑的。从缓存的角度来看,这是一个问题。编辑图像时,我需要确保浏览器获得最新版本。我提出了以下解决方案,我发现这些都是我所缺乏的

可能的解决方案 版本字段 将版本字段与图像一起存储。当编辑图像时,生成格式为
images/{id}/version/{version}
的URL时,将其递增

如果总是从数据库生成图像URL,这很好。但是,我将URL作为文本存储在帖子中,并且可能需要对这些请求的大量文本进行预处理。此外,链接图像会很麻烦,因为url在编辑图像后会变得过时。这可能不是一个好主意

新网址 编辑图像时,将其作为新条目存储在数据库中

这意味着没有版本维护,但是旧链接和旧帖子也会遇到同样的问题。它们从未更新过。性能会很好,但问题仍然存在

304-未修改 为每个图像存储上次编辑的字段。当有条件请求返回http状态304-未修改时,减少带宽使用

这似乎是迄今为止我得到的最好的解决方案。除非进行编辑,否则图像将被缓存,但我以前从未使用过这种方法。如果页面上有50个图像,则仍有50个对服务器的请求。带宽将减少,但延迟仍然存在。这种方法值得付出这样的代价吗

问题
我在这方面的经验很少,我希望你们都有更多的经验。上述任何解决方案可行吗?如果是,你对他们有什么经验?如果不是,那么什么方法更好?

将图像放在磁盘上,让您的web服务器处理

文件可以保持相同的名称(因此URL),web服务器可以处理来自浏览器的修改的标题。此外,浏览器可以更喜欢使用具有已知扩展名的URL


将图像放入数据库并通过脚本提供服务通常不是一个好主意。只需在数据库中引用URL即可

正如您所说,有条件获取是最好的选择,因为您只需要检查一个请求头(如果不匹配或自那以后修改),然后发回相应的状态代码(200或304)和头(E-Tag或上次修改)。然后浏览器将处理图像缓存

此外,根据您的服务器框架,如果您将图像存储在数据库中,您可以在第一次需要图像时缓存它们(在有限的时间内,这样您就不会占用所有服务器内存)。当您需要重复读取同一图像时,这将有助于节省数据库查询。当然,如果编辑图像,则需要将其从服务器缓存中删除


编辑:谢谢你接受答案。如果您需要它,这里有一个很好的解释性链接:。

这肯定是一个选项,但会使扩展到多个服务器变得更加困难。
###Header
Lorem Ipsum dolor sit amet.  ![funny cat](images/25)
<h3>Header</h3>
<p>
  Lorem Ipsum dolor sit amet. <img alt="funny cat" src="images/25" />
</p>