nginx expires控制頁面快取

2021-06-08 22:40:32 字數 3919 閱讀 5302

expires 指令可以控制 http 應答中的「expires 」和「 cache-control 」的頭標(起到控制頁面快取的作用)

語法:expires [time|epoch|max|pff]預設值:offexpires指令控制http應答中的「expires」和「cache-control」header頭部資訊,啟動控制頁面快取的作用time:可以使用正數或負數。「expires」頭標的值將通過當前系統時間加上設定time值來設定。time值還控制"cache-control"的值:負數表示no-cache正數或零表示max-age=time epoch:指定「expires」的值為 1january,1970,00:00:01 gmtmax:指定「expires」的值為31december2037 23:59:59gmt,"cache-control"的值為10年。-1:指定「expires」的值為當前伺服器時間-1s,即永遠過期。off:不修改「expires」和"cache-control"的值

expires使用了特定的時間,並且要求伺服器和客戶端的是中嚴格同步。

而cache-control是用max-age指令指定元件被快取多久。

對於不支援http1.1的瀏覽器,還是需要expires來控制。所以最好能指定兩個響應頭。但http規範規定max-age指令將重寫expires頭。

如果不想讓**或瀏覽器快取,加no-cache引數或private引數:

# expires 1d;

add_header cache-control no-cache;

add_header cache-control private;

這樣瀏覽器f5重新整理時,返回的依然是200,而不是304.

記錄乙個nginx控制快取的例子:

expires 1d;

add_header cache-control no-cache;

add_header cache-control private;

if ( !-e $request_filename) {

rewrite ^(.*) break;

#   add_header cache-control no-cache;

#   add_header cache-control private;

當我將add_header寫在rewrite之後時,發現add_header竟然不起作用了。。是因為寫進了if裡面..

apache的mod_expires模組使得在使用expires頭時能像max-age那樣以相對的方式設定日期,通過expiresdefault指令完成。例如:等過期時間為請求開始的10年之後

expiresdefault "access plus 10years"

它像響應中傳送expires頭和cache-control max-age頭。

expires|etag控制頁面快取區別expires:像上面文章提到的:expires指令控制http應答中的「expires」和「cache-control」header頭部資訊,啟動控制頁面快取的作用time:可以使用正數或負數。「expires」頭標的值將通過當前系統時間加上設定time值來設定。time值還控制"cache-control"的值:負數表示no-cache正數或零表示max-age=time epoch:指定「expires」的值為 1january,1970,00:00:01 gmtmax:指定「expires」的值為31december203723:59:59gmt,"cache-control"的值為10年。-1:指定「expires」的值為當前伺服器時間-1s,即永遠過期。off:不修改「expires」和"cache-control"的值

expires使用了特定的時間,並且要求伺服器和客戶端的是中嚴格同步。

而cache-control是用max-age指令指定元件被快取多久。

對於不支援http1.1的瀏覽器,還是需要expires來控制。所以最好能指定兩個響應頭。但http規範規定max-age指令將重寫expires頭。一般用於頁面變化不是很快的時候,如果快取過期了,瀏覽器在重用它之前會首先確認他是否有效,就是乙個「條件get請求」,如果有效,返回304狀態碼。expires通過last-modified響應頭來確定。如圖:

第一次訪問:

請求:

返回:

第二次訪問:

請求:

返回:

這時返回的狀態碼是304,而在請求中比第一次多了if-modified-since頭,和原始伺服器中的last-modified製作比較,所以實現瀏覽器快取並判斷是否過期。

簡單的說,last-modified 與if-modified-since 都是用於記錄頁面最後修改時間的 http 頭資訊,只是last-modified 是由伺服器往客戶端傳送的 http 頭,而 if-modified-since則是由客戶端往伺服器傳送的頭,可以看到,再次請求本地存在的 cache 頁面時,客戶端會通過 if-modified-since頭將先前伺服器端發過來的 last-modified最後修改時間戳傳送回去,這是為了讓伺服器端進行驗證,通過這個時間戳判斷客戶端的頁面是否是最新的,如果不是最新的,則返回新的內容,如果是最新的,則返回304告訴客戶端其本地cache的頁面是最新的,於是客戶端就可以直接從本地載入頁面了,這樣在網路上傳輸的資料就會大大減少,同時也減輕了伺服器的負擔。

如果不想讓**或瀏覽器快取,加no-cache引數或private引數:

etag:實體標籤,是用來確認web伺服器和瀏覽器快取有效性的一種機制。原始伺服器使用etag響應頭來指定元件的etag瀏覽器通過if-none-match頭將etag傳回原始伺服器。如果匹配,返回304

如圖:第一次訪問:

請求:

返回:

第二次請求:

返回:

依然返回的狀態碼是304,而在請求中比第一次多了if-none-match頭。所以實現瀏覽器快取。如果這個值對不上,則快取過期。

etags和if-none-match是一種常用的判斷資源是否改變的方法。類似於last-modified和http-if-modified-since。但是有所不同的是last-modified和http-if-modified-since只判斷資源的最後修改時間,而etags和if-none-match可以是資源任何的任何屬性。

etags和if-none-match的工作原理是在httpresponse中新增etags資訊。當客戶端再次請求該資源時,將在httprequest中加入if-none-match資訊(etags的值)。如果伺服器驗證資源的etags沒有改變(該資源沒有改變),將返回乙個304狀態;否則,伺服器將返回200狀態,並返回該資源和新的etags。

nginx expires 配置詳解

配置expires expires起到控制頁面快取的作用,合理的配置expires可以減少很多伺服器的請求 要配置expires,可以在http段中或者server段中或者location段中加入 控制等過期時間為30天,當然這個時間可以設定的更長。具體視情況而定比如1 2 3 4 location...

如何控制許可權 100頁面

如果我做乙個大型 用到 u b 100 b u 個頁面。當然我說的都是如果。有 b u 5 u b 種不同身份的登陸證分別是 u 登陸著a u u 登陸著b u u 登陸著c u u 登陸著d u 和 u 登陸著e u 許可權大小是 b a b c d e b b 登陸著a b 能訪問 b 100 ...

struts2 頁面控制時間格式

一 1.寫乙個messages.properties配置檔案 number global.format.money global.format.money02 datetime global.format.date global.format.time global.format.datetime ...