2009-06-21 29 views
29

您是否知道If-Unmodified-Since在野外的任何實際用途? 從description看來,此標題旨在幫助避免髒寫入。即只有在自客戶端可用的上次修改時間以來尚未修改的情況下才更新此資源。與If-Modified-Since不同,它似乎不能幫助緩存。我錯過了什麼嗎?If-Unmodified-Since HTTP Header有什麼用途?

回答

29

您可以使用它,例如爲range request
示例:您的客戶端請求資源http://examp.le/foo?id=3,並且內容長度爲4096,但您的客戶端僅請求前1024個字節。然後它可以(稍後)請求剩餘的3072個字節,但如果資源在此期間發生了變化,那麼這是沒有意義的。

編輯:如果資源已經改變,您也可能不想更改/更新數據。例如。您請求客戶記錄並編輯一些內容。如果其他人在此期間更改了記錄,則可能會導致不一致。因此,使用if-unmodified-since(-I-retrieve-the-data)標題發送更新,如果記錄已更改,則Web服務器將/應拒絕更新 - 客戶端可以請求「衝突」數據。

edit2:既然您已要求「If-Unmodified-Since the wild」的任何實際用途: 請參閱http://msdn.microsoft.com/en-us/library/dd179371.aspx#Subheading1
我們假設你已經第一個requested the Blob properties。現在你知道例如內容類型和內容長度(也許你需要這種分配)。在發送第二個,Get Blob請求之前,某人/某物可能會更改該blob。如果您發送Last-Modified的值作爲If-Unmodified-Since標題的值,則服務器將在適當的錯誤代碼下作出響應,如果blob發生變化。


這些是作爲併發控制手段的樂觀鎖/加蓋鎖的示例,其中Last-Modified標頭的值用作防護標記。見例如 https://en.wikipedia.org/wiki/Optimistic_concurrency_control

+0

我第一次,雖然只是「併發控制」。很好地瞭解範圍要求! – rix0rrr 2009-06-21 12:41:59

-3

假設你正在開發一個應用程序,顯示給定地點的當地天氣。如果服務器每天只更新天氣信息'x'次,那麼瀏覽器可以注意不要在該時間範圍內發出http請求(即使有刷新)​​。

2

恢復大量下載時很有用。

8

對於在一段時間內進行的多個請求有用,但與單個未更改的資源有關。

例子:

  • 範圍請求。對第一個範圍請求(或者初步HEAD)的響應包括Last-Modified標題。後續請求僅適用於該資源的相同版本。如果資源在我們開始範圍請求序列的時間和序列中間的某段時間之間發生了變化,我們希望重新開始。

  • 樂觀併發控制。我們首先爲GET一個資源,在客戶端進行一些更改,並希望PUT更新資源。但只要PUT更新的資源,只要沒有其他人在此期間更新它。我們不想覆蓋任何人的變化。如果事實證明有人在此期間更改了資源,我們希望再次嘗試GET,嘗試重新應用客戶端中的更改(類似於git rebase),並嘗試再次更改資源PUT