【发布时间】:2010-11-04 15:36:53
【问题描述】:
您知道 If-Unmodified-Since 在野外的任何实际用途吗? 从description 看来,此标头旨在帮助避免脏写。即仅当自客户端可用的上次修改时间以来未修改此资源时才更新此资源。与 If-Modified-Since 不同,它似乎对缓存没有帮助。我错过了什么吗?
【问题讨论】:
标签: http
您知道 If-Unmodified-Since 在野外的任何实际用途吗? 从description 看来,此标头旨在帮助避免脏写。即仅当自客户端可用的上次修改时间以来未修改此资源时才更新此资源。与 If-Modified-Since 不同,它似乎对缓存没有帮助。我错过了什么吗?
【问题讨论】:
标签: http
您可以使用它,例如对于range request。
示例:您的客户端请求资源 http://examp.le/foo?id=3 并且 Contents-length 为 4096,但您的客户端仅请求前 1024 个字节。然后它可以(稍后)请求剩余的 3072 字节,但如果资源同时发生变化,这没有意义。
edit:如果资源同时更改,您可能不想更改/更新数据。例如。您请求客户记录并编辑某些内容。如果其他人同时更改了记录,这可能会导致不一致。因此,使用 if-unmodified-since(-I-retrived-the-data) 标头发送您的更新,如果记录已经更改,网络服务器将/应该拒绝您的更新 - 然后您的客户端可以请求“冲突”数据。
edit2:因为您要求“在野外实际使用 If-Unmodified-Since”:
见http://msdn.microsoft.com/en-us/library/dd179371.aspx#Subheading1。
假设您首先是requested the Blob properties。现在你知道了,例如Content-type 和 Content-length (也许你需要它来进行某种分配)。在您发送第二个 Get Blob 请求之前,某人/某事可能会更改 blob。如果您将 Last-Modified 的值作为 If-Unmodified-Since 标头的值发送,则如果 blob 已更改,服务器将使用适当的错误代码进行响应。
【讨论】:
假设您正在开发一个显示给定地点当地天气的应用程序。如果服务器每天只更新 'x' 次天气信息,浏览器可以注意不要在该时间范围内发出 http 请求(即使有刷新)。
【讨论】:
在恢复大量下载时很有用。
【讨论】:
这对于在一段时间内执行但与单个未更改资源相关的多个请求很有用。
例子:
范围请求。对第一个范围请求(或者可能是初步的HEAD)的响应包括Last-Modified 标头。后续请求仅适用于该资源的同一版本。如果资源在我们开始范围请求序列的时间和序列中间的某个时间之间发生了变化,我们希望重新开始。
乐观并发控制。我们首先GET 一个资源,在客户端进行一些更改,并希望PUT 更新资源。但是我们只想PUT更新的资源,只要在此期间没有其他人更新它。我们不想覆盖任何人的更改。如果在此期间发现有人更改了资源,我们想再次GET 它,尝试在客户端重新应用更改(有点像git rebase),并尝试PUT 更改的资源再次。
【讨论】: