从半长操作的结果生成Etags?

时间:2014-01-02 06:05:10

标签: .net asp.net-mvc-4 caching etag

我正试图让我的脑袋围绕着一些缓存技术,我现在正在看的是Etags /条件获取。据我了解,你通常做的是:

  • 提出要求。如果可用,客户端在etag标题
  • 中提供哈希
  • 操作运行并获取结果对象
  • 从该结果对象中,您可以通过某些方式生成etag,例如MD5哈希
  • 如果请求etag,请比较它们。如果匹配,则返回Content Not Modified,否则返回内容和新etag。

考虑整体情况,我有点困惑。在所有情况下,我都可以看到使用Not Modified响应可以节省不必要的响应主体的额外字节,但这对服务器处理时间有何影响?相反,它似乎什么都不做,因为服务器仍然必须生成响应对象,其中包括它到达那里所需的所有后续进程。例如,如果操作非常复杂并且需要几秒钟才能完成。无论输出是否相同,它仍然必须完成操作才能生成结果对象的散列。

我觉得我正在错误地看待这种方法的目的。 etags是仅用于文件等静态资源而不是各种进程的结果资源吗?例如,图像可以很好地利用etag,但是像销售历史这样的报告呢?这是使用etags和一般缓存之间的分界线还是我错过了一块?情景的例子确实会有所帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用HTTP的ETag缓存机制,就像您可能知道的任何其他缓存机制一样。将其视为缓存密钥。您不从结果中生成密钥,而是使用输入参数。

因此,我们假设您拥有资源“/ image?id = bob& dimension = 100x100”。这将从数据库中获取Bob的图片,将其缩小到100x100并将其返回给客户端。不是对缩放图像进行散列,而是对输入参数进行散列:“bob”和“100x100”。如果您的服务器获得该请求,则只需检查Bob是否存在于数据库中并返回304。