我最近通过的念来过ETag
HTTP标头。 ( 本 ),但我仍然有一个问题,即谁是负责产生的ETag一个特定的HTTP资源?
换句话说,它是实际应用中,容器(例如:Tomcat的),Web服务器/负载均衡器(例如:阿帕奇/ Nginx的)?
任何人都可以请帮助?
我最近通过的念来过ETag
HTTP标头。 ( 本 ),但我仍然有一个问题,即谁是负责产生的ETag一个特定的HTTP资源?
换句话说,它是实际应用中,容器(例如:Tomcat的),Web服务器/负载均衡器(例如:阿帕奇/ Nginx的)?
任何人都可以请帮助?
作为HTTP规范的大多数方面,责任最终在于不管是谁提供的资源。
当然,这往往是我们使用的工具,服务器,负载均衡,应用框架等,帮助我们履行这些责任的话。 但没有任何定义什么是“网络服务器”,而不是应用程序,预计将提供规范,这是一个什么样的功能是在你使用可用的工具只是一个实际的问题。
现在,看着ETags
特别是常见的情况是,该框架或Web服务器可以被配置为自动散列响应(无论是身体还是其他什么东西),并把结果在ETag
。 然后,在有条件的请求时,它会生成一个响应和散列它,看它是否已经改变,并自动发送条件的响应,如果它没有。
举两个例子,我很熟悉, nginx的能做到这一点用在Web服务器级别的静态文件, Django的可以做到这一点与在应用程序级别的动态响应。
这种做法很常见,易于配置,并且工作得很好。 在某些情况下,虽然,它可能不适合您的使用情况下最合适的。 例如:
ETag
你首先得有一个响应。 因此,尽管有条件的响应可以节省您发送响应的开销,不能救你产生响应的成本。 所以,如果您的生成反应是昂贵的,你有一个替代来源ETags
(例如,存储在数据库中的版本号),你可以用它来获得更好的性能。 ETags
,以防止意外覆盖具有状态改变的方法 ,你可能需要添加自己的应用程序代码,以使您的比较并设置逻辑原子。 因此,在某些情况下,你可能想创建ETags
在应用程序级别。 要再次采取的Django为例,它提供了一种简单的方式为您提供自己的函数来计算ETags
。
总之,这是最终的责任提供ETags
你控制的资源,但你可能可以利用的工具,在软件堆栈为你做它。