[英]How can I make my site’s visitors access my web pages without adding the page extension
[英]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:56
年25-09-2015, 23:56
月25-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.