Nginx作為靜態資源web服務之緩存原理
大致理一下http瀏覽器緩存原理:
瀏覽器第一次請求服務器,此時瀏覽器肯定沒有緩存,則直接調用服務器端,服務器在返回的信息的信息頭中添加 ETag和Last-Modified參數信息,返回給客戶端瀏覽器緩存。
然后瀏覽器以后的請求,先判斷是否有緩存,那么怎么判斷有緩存呢,有三步:
(1)是否過期
(2)對ETag信息對比 ,ETag: 就是一個生成的字符串
(3)對Last-Modified信息對比;Last-Modified:服務端最后一次修改的時間。
如果沒有過期,則將信息直接返回回去,如果過期了,則將請求發送到服務端,此時request的頭信息中帶着ETag和Last-Modified信息,responose頭信息中也帶着這兩個參數,如果一致,則表示要訪問的資源沒有發生改變,直接返回304,如果不一致,則表明資源改變,會請求服務端,返回200。
下面通過配置 緩存過期時間來讓其實現緩存
配置語法:expires 【modified】time;
expires epoch | max | off;
默認配置:expires off;
配置路徑:http、server、location、if in location
使用demo測試
1. 修改default.conf配置文件,添加如下配置,暫時不添加緩存配置
2. 重新加載nginx,輸入網址,看出客戶端和服務端狀態如下
由上圖可以看出,第一次請求是沒有緩存的,訪問服務器返回200,並且再返回的信息頭中返回了以上的兩個參數 ETag和Last-Modified。下面我們刷新,再來看看效果
3. 刷新網頁,查看狀態
由上圖看出,第二次請求,返回的狀態是304,在請求信息頭中有上圖兩個參數,與服務端返回的參數對比,發現是一致的,所以直接返回 304。下面我們配置緩存過期時間
4. 配置過期時間
5. 刷新網址,看看效果
由上圖看出,服務器端返回的參數中有了過期時間,以及expires參數數據,因此過期時間配置成功。
