簡體   English   中英

如何將網站設置為緩存,但仍要確保用戶使用最新版本?

[英]How do I set my web site to cache but still make sure the user has the most recent version?

我希望我的網站可以從緩存中受益,但是該網站經常更新。 如何確保用戶獲得最新版本?

目前,我的.htaccess文件如下所示:

<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On 
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 year"
</IfModule>

您可以將base用作經常更改的應用程序資源的“修改”,並根據您的期望提供訪問時間。 以下是“修改”的工作方式:

假設您預計每天都會修改CSS文件,那么可以使用ExpiresByType text/css "modification plus 1 day"然后就會發生這種情況(考慮到您在25-09-2015, 23:55上傳了CSS文件):

  • 客戶端在25-09-2015, 23:5625-09-2015, 23:5625-09-2015, 23:56訪問您的頁面25-09-2015, 23:56並下載所有CSS文件。 現在,由於Apache在響應標頭中發送了上次修改的時間,因此客戶端肯定會獲得Last-Modified:Fri, 25 Sep 2015 23:55:00 GMT並且由於您將ExpiresByType指令與“ modification”基一起使用,因此Apache將計算其到期時間時間為-> [上次修改時間( 服務器中上次修改資源的時間,在這種情況下為2015年9月25日 )+以“修改”為基礎指定的時間( 在這種情況下為1天 )],因此有效期將計算為26 Sep 2015 23:55 ,因此Apache將發送Expires: Sat, 26 Sep 2015 23:55:00 GMT 因此,Apache將發送給客戶端的2個與緩存相關的響應標頭將為:

     Last-Modified:Fri, 25 Sep 2015 23:55:00 GMT Expires: Sat, 26 Sep 2015 23:55:00 GMT 
  • 現在,假設客戶在26 Sep 2015 03:55再次訪問該頁面,那么它將看到該文檔未過期,因此將使用該文檔的緩存版本。 這將按照您的預期進行。

  • 現在,假設客戶在26 Sep 2015 23:56再次訪問該頁面,然后它將看到該文檔已過期,因此將向服務器發送請求以獲取新文檔。

因此,現在客戶端每次發現文檔過期時都會向服務器發送請求。 當您進行全新上傳時,Apache將重新計算到期時間,並將在Expires響應標頭中發送相同的時間。

您可以看看這個問題的答案,這非常好。

對於您不希望經常修改的資源,您可以繼續使用“訪問”作為基礎,就像您已經正確地為Favicon做的那樣,預計一年之內不會更改。


不幸的是,Apache無法完全解決此目的- “僅當服務器上有可用的修改版本時才從服務器獲取新文檔,否則繼續使用緩存的文檔”,因為在向服務器發送請求之前,客戶端無法真正知道文檔是否已更改。 或需要在服務器推送一些信息並基於此客戶端行為的情況下實現PUSH技術。

其他一些信息:
HTML5提供了一個稱為app-cache / offline-cache的功能,該功能可實現脫機導航,但被認為已損壞,將不再使用 如果您想實現用戶脫機體驗,則可以選擇服務工作者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM