如何ETag的生成和配置?(How ETags are generated and configur

2019-11-04 13:03发布

我最近通过的念来过ETag HTTP标头。 ( 本 ),但我仍然有一个问题,即谁是负责产生的ETag一个特定的HTTP资源?

换句话说,它是实际应用中,容器(例如:Tomcat的),Web服务器/负载均衡器(例如:阿帕奇/ Nginx的)?

任何人都可以请帮助?

Answer 1:

作为HTTP规范的大多数方面,责任最终在于不管是谁提供的资源。

当然,这往往是我们使用的工具,服务器,负载均衡,应用框架等,帮助我们履行这些责任的话。 但没有任何定义什么是“网络服务器”,而不是应用程序,预计将提供规范,这是一个什么样的功能是在你使用可用的工具只是一个实际的问题。

现在,看着ETags特别是常见的情况是,该框架或Web服务器可以被配置为自动散列响应(无论是身体还是其他什么东西),并把结果在ETag 。 然后,在有条件的请求时,它会生成一个响应和散列它,看它是否已经改变,并自动发送条件的响应,如果它没有。

举两个例子,我很熟悉, nginx的能做到这一点用在Web服务器级别的静态文件, Django的可以做到这一点与在应用程序级别的动态响应。

这种做法很常见,易于配置,并且工作得很好。 在某些情况下,虽然,它可能不适合您的使用情况下最合适的。 例如:

  • 要计算哈希来比较传入ETag你首先得有一个响应。 因此,尽管有条件的响应可以节省您发送响应的开销,不能救你产生响应的成本。 所以,如果您的生成反应是昂贵的,你有一个替代来源ETags (例如,存储在数据库中的版本号),你可以用它来获得更好的性能。
  • 如果你打算使用ETags ,以防止意外覆盖具有状态改变的方法 ,你可能需要添加自己的应用程序代码,以使您的比较并设置逻辑原子。

因此,在某些情况下,你可能想创建ETags在应用程序级别。 要再次采取的Django为例,它提供了一种简单的方式为您提供自己的函数来计算ETags

总之,这是最终的责任提供ETags你控制的资源,但你可能可以利用的工具,在软件堆栈为你做它。



文章来源: How ETags are generated and configured?