【技術心得】Last-Modified,Etag,Expire 區別
Last-Modified 是什麼
Last-Modified 是 HttpHeader 中的資源的最後修改時間,如果帶有 Last-Modified ,下一次發送 Http 請求時,將會發生帶 If-modified-since 的 HttpHeader 。如果沒有過期,將會收到 304 的響應,從緩存中讀取。
Etag 是什麼
Etag 是 HttpHeader 中代表資源的標籤,在服務器端生成。如果帶有 Etag ,下一次發送帶 Etag 的請求,如果 Etag 沒有變化將收到 304 的響應,從緩存中讀取。
Etag 在使用時要注意相同資源多臺 Web 服務器的 Etag 的一致性。
Expire 是什麼
Expire 是 HttpHeader 中代表資源的過期時間,由服務器段設置。如果帶有 Expire ,則在 Expire 過期前不會發生 Http 請求,直接從緩存中讀取。用戶強制 F5 例外。
Last-Modified,Etag,Expire 混合
通常 Last-Modified,Etag,Expire 是一起混合使用的,特別是 Last-Modified 和 Expire 經常一起使用,因爲 Expire 可以讓瀏覽器完全不發起 Http 請求,而當瀏覽器強制 F5 的時候又有 Last-Modified ,這樣就很好的達到了瀏覽器段緩存的效果。
Etag 和 Expire 一起使用時,先判斷 Expire ,如果已經過期,再發起 Http 請求,如果 Etag 也過期,則返回 200 響應。如果 Etag 沒有過期則返回 304 響應。
Last-Modified,Etag,Expires 三個同時使用時。先判斷 Expire ,然後發送 Http 請求,服務器先判斷 last-modified ,再判斷 Etag ,必須都沒有過期,才能返回 304 響應。