你知道If-Unmodified的任何实际用途 - 在野外吗? 从description开始,看起来这个标题旨在帮助避免脏写。即,仅在客户端可用的上次修改时间之后尚未修改此资源时才更新此资源。与If-Modified-Since不同,它似乎对缓存没有帮助。我错过了什么吗?
答案 0 :(得分:33)
您可以使用它,例如对于range request 示例:您的客户端请求资源http://examp.le/foo?id=3,内容长度为4096,但您的客户端仅请求前1024个字节。然后它可以(稍后)请求剩余的3072个字节,但如果资源同时发生变化则没有意义。
编辑:如果资源同时发生变化,您可能也不想更改/更新数据。例如。您请求客户记录并编辑某些内容。如果其他人在此期间更改了记录,则可能导致不一致。因此,使用if-unmodified-since(-I-retrieve-the-data)标头发送您的更新,如果记录已经更改,Web服务器将拒绝您的更新 - 您的客户端可以请求“冲突”数据。
edit2:因为你已经要求“任何实际使用If-Unmodified-Since in the wild”:
见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发生更改时使用相应的错误代码进行响应。
答案 1 :(得分:8)
它对于在一段时间内执行的多个请求很有用,但与单个未更改的资源有关。
示例:
范围请求。对第一个范围请求(或可能是初步HEAD
)的响应包括Last-Modified
标头。后续请求仅适用于该资源的相同版本。如果资源在我们开始范围请求序列和序列中间某个时间之间发生变化,我们希望重新开始。
乐观并发控制。我们首先GET
一个资源,在客户端进行一些更改,并希望PUT
更新资源。但是,只要没有其他人在此期间更新资源,我们只想PUT
更新资源。我们不想覆盖任何人的变化。如果事实证明有人在此期间更改了资源,我们想再次GET
,尝试重新应用客户端中的更改(类似于git rebase
),并尝试{{ 1}}再次更改资源。
答案 2 :(得分:3)
恢复大量下载时非常有用。
答案 3 :(得分:-4)
假设您正在开发一个显示特定地点当地天气的应用程序。如果服务器仅每天仅更新“x”次天气信息,则浏览器可以注意不要在该时间范围内发出http请求(即使有刷新)。