當前位置:首頁 » 文件管理 » http緩存設置

http緩存設置

發布時間: 2022-10-30 09:35:37

1. html怎麼設置http頭部緩存

用於設定網頁的到期時間,一旦過期則必須到伺服器上重新調用。需要注意的是必須使用GMT時間格式;
<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">

用於設定禁止瀏覽器從本地機的緩存中調閱頁面內容,設定後一旦離開網頁就無法從Cache中再調出;

<meta http-equiv="Pragma" contect="no-cache">

2. 北大青鳥java培訓:web編程開發都有哪些前端緩存

緩存問題在web前端編程開發領域中是一個非常重要的技術問題,下面我們就一起來了解一下,關於web緩存我們都需要了解哪些知識。
緩存優點通常所說的Web緩存指的是可以自動保存常見http請求副本的http設備。
對於前端開發者來說,瀏覽器充當了重要角色。
除此外常見的還有各種各樣的代理伺服器也可以做緩存。
當Web請求到達緩存時,緩存從本地副本中提取這個副本內容而不需要經過伺服器。
這帶來了以下優點:緩存減少了冗餘的數據傳輸,節省流量緩存緩解了帶寬瓶頸問題。
不需要更多的帶寬就能更快載入頁面緩存緩解了瞬間擁塞,降低了對原始伺服器的要求。
緩存降低了距離延時,因為從較遠的地方載入頁面會更慢一些。
緩存種類緩存可以是單個用戶專用的,也可以是多個用戶共享的。
專用緩存被稱為私有緩存,共享的緩存被稱為公有緩存。
私有緩存私有緩存只針對專有用戶,所以不需要很大空間,廉價。
Web瀏覽器中有內建的私有緩存——大多數瀏覽器都會將常用資源緩存在你的個人電腦的磁碟和內存中。
公有緩存公有緩存是特殊的共享代理伺服器,被稱為緩存代理伺服器或代理緩存(反向代理的一種用途)。
公有緩存會接受來自多個用戶的訪問,所以通過它能夠更好的減少冗餘流量。
新鮮度限值HTTP通過緩存將伺服器資源的副本保留一段時間,這段時間稱為新鮮度限值。
這在一段時間內請求相同資源不會再通過伺服器。
HTTP協議中Cache-Control和Expires可以用來設置新鮮度的限值,前者是HTTP1.1中新增的響應頭,後者是HTTP1.0中的響應頭。
電腦培訓http://www.kmbdqn.cn/發現二者所做的事時都是相同的,但由於Cache-Control使用的是相對時間,而Expires可能存在客戶端與伺服器端時間不一樣的問題,所以我們更傾向於選擇Cache-Control。

3. BT每個HTTP連接磁碟緩存大小如何設置

這個沒有太大的要求了,一般說來軟體的默認設置現在已經調到合理范圍了。如果你是近兩年買的硬碟也不需要擔心因為bt下載損傷硬碟,因為現在的硬碟緩存也比較大了。但是老式的硬碟則需要區別對待。一般有個十幾M就差不多了吧。

4. 在HTTP報文中增加緩存控制和在html的meta中做緩存控制有什麼區別

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletA extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//servlet頁面默認是不緩存的
//本頁面允許在瀏覽器端或緩存伺服器中緩存,時限為20秒。
//20秒之內重新進入該頁面的話不會進入該servlet的
java.util.Date date = new java.util.Date();
response.setDateHeader("Last-Modified",date.getTime()); //Last-Modified:頁面的最後生成時間
response.setDateHeader("Expires",date.getTime()+20000); //Expires:過時期限值
response.setHeader("Cache-Control", "public"); //Cache-Control來控制頁面的緩存與否,public:瀏覽器和緩存伺服器都可以緩存頁面信息;
response.setHeader("Pragma", "Pragma"); //Pragma:設置頁面是否緩存,為Pragma則緩存,no-cache則不緩存

//不允許瀏覽器端或緩存伺服器緩存當前頁面信息。
/*response.setHeader( "Pragma", "no-cache" );
response.setDateHeader("Expires", 0);
response.addHeader( "Cache-Control", "no-cache" );//瀏覽器和緩存伺服器都不應該緩存頁面信息
response.addHeader( "Cache-Control", "no-store" );//請求和響應的信息都不應該被存儲在對方的磁碟系統中;
response.addHeader( "Cache-Control", "must-revalidate" );*///於客戶機的每次請求,代理伺服器必須想伺服器驗證緩存是否過時;

System.out.println("進入了servlet");
response.getWriter().write("歡迎光臨我的主頁");
}

}

5. traffic server 怎麼緩存http頁面

客戶端指示

默認情況下,Traffic Server不緩存含有如下請求頭部的對象:

Cache-Control: no-store頭部

Cache-Control: no-cache頭部

配置Traffic Server忽略Cache-Control: no-cache頭部,見Configuring Traffic Server to Ignore Client no-cache Headers。

Cookie: 頭部(文本對象)

默認情況下,Traffic Server緩存為包含cookies請求服務的響應對象(除了文本對象)。可以配置Traffic
Server不緩存任何類型的cookies內容、緩存所有的cookies內容或者只緩存圖片類型的cookies內容。更多信息見Caching
Cookied Objects。

Authorization: 頭部

配置Traffic Server忽略客戶端的no-cache頭部

默認情況下,Traffic Server嚴格遵守客戶端Cache-Control:
no-cache的指示。如果一個被請求的對象包含no-cache頭部,即使它在緩存中仍然有效,Traffic
Server也會將該請求傳遞給源伺服器。可以配置Traffic
Server忽略客戶端no-cache指示,這樣它將忽略客戶端請求的no-cache頭部並用緩存中的對象服務該請求。

配置Traffic Server忽略客戶端的no-cache頭部

1. 在文本編輯器中打開位於Traffic Server的config目錄下的records.config文件。

2. 編輯下面的變數:

變數

描述

proxy.config.http.cache.ignore_client_no_cache

設置這個變數為1來忽略客戶端請求旁路緩存。

3. 保存並關閉records.config文件

4. 定位到Traffic Server的bin目錄

5. 運行traffic_line –x命令來應用配置文件的變更。

源伺服器指示

默認情況下,Traffic Server不緩存包含如下響應頭部的對象:

Cache-Control: no-store頭部

Cache-Control: private頭部

WWW-Authenticate: 頭部

要配置Traffic Server忽略WWW-Authenticate頭部,見Configuring Traffic Server to Ignore WWW-Authenticate Headers。

Set-Cookie: 頭部

Cache-Control: no-cache頭部

要配置Traffic Server忽略no-cache頭部,見Configuring Traffic Server to Ignore Server no-cache Headers。

Expires: 頭部包含0值或過去時間

配置Traffic Server忽略伺服器no-cache頭部

默認情況下,Traffic Server嚴格遵守Cache-Control:
no-cache指示。一個來自源伺服器的帶有no-cache頭部的響應將不會被存儲在緩存,該對象之前在緩存中的拷貝也會被刪除。如果配置
Traffic Server忽略no-cache頭部,Traffic
Server同時也忽略no-store頭部。在大多數情況下是應該遵守no-cache指示的。

配置Traffic Server忽略伺服器no-cache頭部

1. 在文本編輯器中打開位於Traffic Server的config目錄下的records.config文件。

2. 編輯下面的變數:

變數

描述

proxy.config.http.cache.ignore_server_no_cache

設置這個變數為1來忽略伺服器旁路緩存。

3. 保存並關閉records.config文件

4. 定位到Traffic Server的bin目錄

5. 運行traffic_line –x命令來應用配置文件的變更。

配置Traffic Server忽略WWW-Authenticate頭部

默認情況下,Traffic Server不緩存包含WWW-Authenticate響應頭部的對象。WWW-Authenticate頭部包含著客戶端准備用來響應源伺服器挑戰應答的鑒定參數。

當配置Traffic
Server忽略源伺服器的WWW-Authenticate頭部,所有帶WWW-Authenticate頭部的對象將被存儲在緩存中被用來服務後來的
請求,在大多數情況下,應該使用默認的不緩存帶WWW-Authenticate頭部對象的行為。只有在對HTTP
1.1深入理解的基礎上,再嘗試配置Traffic Server忽略伺服器WWW-Authenticate頭部。

配置Traffic Server忽略WWW-Authenticate頭部

1. 在文本編輯器中打開位於Traffic Server的config目錄下的records.config文件。

2. 編輯下面的變數:

變數

描述

proxy.config.http.cache.ignore_authentication

設置這個變數為1來緩存帶WWW-Authenticate頭部的對象。

3. 保存並關閉records.config文件

4. 定位到Traffic Server的bin目錄

5. 運行traffic_line –x命令來應用配置文件的變更。

配置指示

除了客戶端和伺服器的指示,Traffic Server同樣響應配置選項和文件的指示。

可以按如下步驟來配置Traffic Server:

l 不緩存任何對象(見Disabling HTTP Object Caching)。

緩存動態內容 — 對象的URL以.asp結尾或者包含問號(?)、分號(:)或者cgi。更多信息見Caching Dynamic Content。

緩存響應Cookie: 頭部的對象(見Caching Cookied Objects)。

遵守cache.config文件中的從不緩存規則(見cache.config)。

關閉HTTP 對象緩存功能

默認情況下,Traffic Server緩存除了在cache.config文件中設置了從不緩存規則的所有對象。可以關閉HTTP 對象緩存功能,所有的對象都直接由源伺服器服務而且從不緩存。

手動配置關閉HTTP對象緩存功能:

1. 在文本編輯器中打開位於Traffic Server的config目錄下的records.config文件。

2. 編輯下面的變數:

變數

描述

proxy.config.http.cache.http

設置這個變數為0來關閉HTTP對象緩存功能。

3. 保存並關閉records.config文件

4. 定位到Traffic Server的bin目錄

5. 運行traffic_line –x命令來應用配置文件的變更。

緩存動態內容

一個以.asp結尾或包含問號(?)、分號(;)或者cgi的URL被認為是動態的。Traffic Server不緩存冬天內容。可以配置Traffic Server緩存動態內容,當然這只推薦在專門的代理情形下使用。

配置Traffic Server緩存動態內容:

1. 在文本編輯器中打開位於Traffic Server的config目錄下的records.config文件。

2. 編輯下面的變數:

變數

描述

proxy.config.http.cache_urls_that_look_dynamic

設置這個變數為1來緩存動態內容。

3. 保存並關閉records.config文件

4. 定位到Traffic Server的bin目錄

5. 運行traffic_line –x命令來應用配置文件的變更。

緩存Cookied對象

默認情況下,Traffic Server緩存為包含cookies請求服務的響應對象(除了文本對象)。Traffic
Server之所以不緩存文本內容的cookied,是因為對象的頭部和對象是一起存儲的,而帶有隱私的cookie頭部是不能和對象一起保存的。對於非
文本對象,不能確定是否使用了帶有隱私的cookie頭部。

可以配置Traffic Server:

不緩存任何類型的cookies內容。

只緩存圖片類型的cookies內容。

緩存所有的cookies內容。

配置Traffic Server緩存cookied內容的方式:

1. 在文本編輯器中打開位於Traffic Server的config目錄下的records.config文件。

2. 編輯下面的變數:

變數

描述

proxy.config.http.cache.cache_responses_to_cookies

設置這個變數來指定Traffic Server緩存cookied內容的方式:

0 = 不緩存任何cookies響應。

1 = 緩存所有的cookies響應。

2 = 只緩存圖片類型的cookies響應。

3 = 緩存除了文本內容類型的所有cookies響應。

3. 保存並關閉records.config文件

4. 定位到Traffic Server的bin目錄

5. 運行traffic_line –x命令來應用配置文件的變更。

6. http緩存之基本概念

1. 重要性

綜上所述,所以大家很有必要花時間來研究。

2. 困難之處
個人認為http緩存是比較枯燥的理論知識,尤其對於前端來講,更多在於理解概念,以及內部緩存機制,而沒有什麼實踐可以鞏固,或者說理論和現實脫軌。

瀏覽器會在請求資源之後,根據自己的緩存策略判斷是否對資源進行緩存,當再次請求相同的資源時,瀏覽器根據緩存策略判斷是通過本地緩存獲取資源,還是重新向伺服器發起請求。

這個 緩存策略 到底是什麼呢?
實際每個瀏覽器的緩存策略是有差異的,但大致受以下幾個因素的影響。

搜索關鍵字 禁止 html 緩存 ,很容易搜到以下答案:

但是,這是 Html 4.0 中的規范,在 Html 5.0 的規范中 http-equiv 已經不存在以上屬性值了。
而且代理伺服器並不會讀取以上meta標簽,不利於代理伺服器的緩存。

-- 引用自 stackoverflow

綜上所述, html meta 是一個不那麼可靠,並且已經過時的解決方案,所以不建議再繼續使用

基於 HTTP 協議的緩存策略,分為 強緩存 和 協商緩存 , 由 HTTP 協議的首部 (Headers) 信息決定。具體的操作設置需要伺服器配合,比如 Nginx 。所以相對來說都是後端在做此類事情,前端接觸的機會比較少。

如果開啟了強緩存,並且在過期時間之內,則瀏覽器不再發起請求,直接使用本地的緩存資源。
Expires 和 Cache-control 用於控制強制緩存。

Expires 是 HTTP 1.0 的特性。通過指定一個明確的時間點作為緩存資源的過期時間,客戶端會根據此時間點來判斷到底使用本地緩存,還是向伺服器重新請求資源。

優點: 在緩存過期時間內,減少客戶端的 HTTP 請求,不僅節省了客戶端處理時間,提高了 web 應用的執行速度,而且減少了伺服器負載,以及客戶端網路資源的消耗。

缺點:指定的過期時間以伺服器為准,但是客戶端進行過期時間判斷時是將 本地的時間 與 指定的過期時間點 進行對比。如果客戶端修改了本地時間,將會影響對緩存的判斷。

Cache-control 是HTTP1.1 新增的特性,以便更精準地控制緩存。此首部信息 具有最高的優先順序。

max-age 指定的是緩存的時間跨度,而非緩存失效的時間點。優先順序比 Expires 高。

如果需要使用協商緩存,需要 將 Cache-control 指定為 no-cache 或者 max-age 、Expires 均過期之後。

協商緩存:瀏覽器本地是有緩存的,但是要先發起請求,由伺服器判斷緩存是否過期。

Last-Modified / If-Modified-Since

last-Modified 是 HTTP 1.0 的特性,是伺服器端在響應請求時用來說明資源的最後修改時間。

缺點:

Etag / If-None-Match

Etag 是 HTTP 1.1 的特性,是伺服器為資源分配的字元串形式唯一性標識,作為響應首部返回給瀏覽器。

採用弱比較,內容沒變化,時間變化了,會認為是資源未變化。

瀏覽器之HTTP緩存的那些事
304和瀏覽器http緩存
瀏覽器緩存機制剖析
瀏覽器緩存機制介紹
技術研究 vue項目的性能優化之路
HTTP緩存控制小結

7. Okhttp解析(五)緩存的處理

大家好,之前我們講解了Okhttp網路數據請求相關的內容,這一節我們講講數據緩存的處理。本節按以下內容講解Okhttp緩存相關的內容。

緩存的使用場景很多,通過它可以將數據通過一定的規則存儲起來,再次請求數據的時候就可以快速從緩存中讀取了,緩存有以下優勢。

HTTP本身提供了一套緩存相關的機制。這套機制定義了相關的欄位和規則,用來客戶端和服務端進行緩存相關的協商,如響應的數據是否需要緩存,緩存有效期,緩存是否有效,伺服器端給出指示,而客戶端則根據服務端的指示做具體的緩存更新和讀取緩存工作。http緩存可以分為兩類:

強制緩存,在緩存數據未失效的情況下,可以直接使用緩存數據,有兩個欄位Expires和Cache-Control用於標明失效規則。

表示過期時間,由服務端返回。那麼下次請求數據時,判斷這個Expires過期時間是否已經過了,如果還沒有到過期時間,則使用緩存,如果過了過期時間,則重新請求伺服器的數據。Expires格式如下:

不過因為伺服器和客戶端的時間並不是同步的,用一個絕對時間作為過期的標記並不是很明智,所以HTTP1.1之後更多的是Cache-Control,它的控制更加靈活。

表示緩存的控制,有服務端返回。它有以下幾個取值:

默認情況下是private,也就是不能共享的。Cache-Control格式如下:

對比緩存,表示需要和服務端進行相關信息的對比,由伺服器決定是使用緩存還是最新內容,如果伺服器判定使用緩存,返回響應嗎304,判定使用最新內容,則返回響應碼200和最新數據。對比緩存的判定欄位有兩組:

ETag表示資源的一種標識信息,用於標識某個資源,由服務端返回,優先順序更高。格式如下:

然後客戶端再次請求時,加入欄位If-None-Match,格式如下:

服務端收到請求的該欄位時(之前的Etag值),和資源的唯一標識進行對比,如果相同,說明沒有改動,則返回狀態碼304,如果不同,說明資源被改過了,則返回狀態碼200和整個內容數據。

Last-Modified表示資源的最近修改時間,由服務端返回,優先順序更低。格式如下:

Last-Modified
由伺服器返回,表示響應的數據最近修改的時間。


If-Modified-Since
由客戶端請求,表示詢問伺服器這個時間是不是上次修改的時間。如果服務端該資源的修改時間小於等於If-Modified-Since指定的時間,說明資源沒有改動,返回響應狀態碼304,可以使用緩存。如果服務端該資源的修改時間大於If-Modified-Since指定的時間,說明資源又有改動了,則返回響應狀態碼200和最新數據給客戶端,客戶端使用響應返回的最新數據。

Last-Modified欄位的值(服務端返回的資源上次修改時間),常常被用於客戶端下次請求時的If-Modified-Since欄位中。

HTTP的緩存規則是優先考慮強制緩存,然後考慮對比緩存。

Okhttp緩存相關的類有如下:

要開啟使用Okhttp的緩存其實很簡單,只需要給OkHttpClient對象設置一個Cache對象即可,創建一個Cache時指定緩存保存的目錄和緩存最大的大小即可。

那麼下面我們來看看Okhttp緩存執行的大概流程

Okhttp的緩存流程分為讀取緩存和存儲緩存兩個過程,我們分別分析。

讀取使用緩存的流程從HttpEngine的sendRequest發送請求開始。

接下來我們分析

從Cache的get方法開始。它按以下步驟進行。

如果存在緩存的話,在指定的緩存目錄中,會有兩個文件「****.0」和「****.1」,分別存儲某個請求緩存的響應頭和響應體信息。(「****」是url的md5加密值)對應的ENTRY_METADATA響應頭和ENTRY_BODY響應體。緩存的讀取其實是由DiskLruCache來讀取的,DiskLruCache是支持Lru(最近最少訪問)規則的用於磁碟存儲的類,對應LruCache內存存儲。它在存儲的內容超過指定值之後,就會根據最近最少訪問的規則,把最近最少訪問的數據移除,以達到總大小不超過限制的目的。

接下來我們分析CacheStrategy緩存策略是怎麼判定的。

直接看CacheStrategy的get方法。緩存策略是由請求和緩存響應共同決定的。

接來下我們看看CacheControl類里有些什麼。

可以發現,它就是用於描述響應的緩存控制信息。

然後我們再看看Okhttp存儲緩存是怎麼進行的。

存儲緩存的流程從HttpEngine的readResponse發送請求開始的。

可以看到這里先通過maybeCache寫入了響應頭信息,再通過cacheWritingResponse寫入了響應體信息。我們再進去看Cache的put方法實現。

我們繼續看Cache的writeTo方法,可以看到是寫入一些響應頭信息。

到這里Okhttp緩存的讀取和存儲流程我們就清楚了。可以說,緩存的使用策略基本都是按照HTTP的緩存定義來實現的,所以對HTTP緩存相關欄位的理解是很重要的。然後關於DiskLruCache是如何管理緩存文件的,這個其實也很好理解,首先的原則就是按照LRU這種最近最少使用刪除的原則,當總的大小超過限定大小後,刪除最近最少使用的緩存文件,它的LRU演算法是使用LinkedHashMap進行維護的,這樣來保證,保留的緩存文件都是更常使用的。具體實現大家可以分析DiskLruCache和LinkedHashMap的實現原理。

8. 瀏覽器緩存機制

有dns的地方,就有緩存。瀏覽器、操作系統、Local DNS、根域名伺服器,它們都會對DNS結果做一定程度的緩存。

DNS查詢過程如下:

首先搜索瀏覽器自身的DNS緩存,如果存在,則域名解析到此完成。
如果瀏覽器自身的緩存裡面沒有找到對應的條目,那麼會嘗試讀取操作系統的hosts文件看是否存在對應的映射關系,如果存在,則域名解析到此完成。
如果本地hosts文件不存在映射關系,則查找本地DNS伺服器(ISP伺服器,或者自己手動設置的DNS伺服器),如果存在,域名到此解析完成。
如果本地DNS伺服器還沒找到的話,它就會向根伺服器發出請求,進行遞歸查詢。

瀏覽器本地緩存失效後,瀏覽器會向CDN邊緣節點發起請求。類似瀏覽器緩存,CDN邊緣節點也存在著一套緩存機制。CDN邊緣節點緩存策略因服務商不同而不同,但一般都會遵循http標准協議,通過http響應頭中的
Cache-control: max-age 的欄位來設置CDN邊緣節點數據緩存時間。

當瀏覽器向CDN節點請求數據時,CDN節點會判斷緩存數據是否過期,若緩存數據並沒有過期,則直接將緩存數據返回給客戶端;否則,CDN節點就會向伺服器發出回源請求,從伺服器拉取最新數據,更新本地緩存,並將最新數據返回給客戶端。 CDN服務商一般會提供基於文件後綴、目錄多個維度來指定CDN緩存時間,為用戶提供更精細化的緩存管理。

CDN 優勢
CDN節點解決了跨運營商和跨地域訪問的問題,訪問延時大大降低。
大部分請求在CDN邊緣節點完成,CDN起到了分流作用,減輕了源伺服器的負載。

http請求報文(request)
請求行
請求方法  空格  URL 空格  協議版本 回車符 換行符
請求頭(通用信息頭、請求頭、實體頭)
頭部欄位名 冒號  值  回車鍵 換行符
...
頭部欄位名 冒號  值  回車鍵 換行符
空行
回車符   換行符
實體主體(只有post請求有)
主體

http響應報文(response)
狀態行
協議版本  空格  狀態碼 空格  狀態碼描述 回車符 換行符
響應頭部
頭部欄位名 冒號  值   回車符 換行符
...
頭部欄位名 冒號  值   回車符 換行符
空行
回車符   換行符
響應正文
正文

瀏覽器初次向伺服器發起請求後拿到請求結果,會根據響應報文中HTTP頭的緩存標識,決定是否緩存返回的結果,是則將請求結果和緩存標識存入瀏覽器緩存中

瀏覽器每次發起請求,都會現在瀏覽器緩存中查找該請求的結果以及緩存標識
瀏覽器                瀏覽器緩存        伺服器

——————第一次發起http請求——————>

<——沒有該請求的緩存結果和緩存標識————

——————————————發起http請求——————————————>

<——————————返回該請求結果和緩存規則————————————

——將請求結果和緩存標識存入瀏覽器緩存——>

強制緩存就是向瀏覽器緩存查找結果,並根據該結果的緩存規則來決定是否使用該緩存結果的過程

強制緩存的情況分為三種:
1、不存在該緩存結果和緩存標識,強制緩存失效,直接向伺服器發起請求
2、存在該緩存結果和緩存標識,但結果已經失效,強制緩存失效,使用協商緩存
3、存在該緩存結果和緩存標識,且該結果沒有失效,強制緩存生效,直接返回該結果

控制強制緩存的欄位:Expires,Cache-Control

Expires 是 HTTP/1.0 控制緩存的欄位,值為伺服器返回該請求的結果緩存時間
即再次發送請求是,客戶端時間 小於 Expires的值,直接使用緩存結果

Cache-Control 是HTTP/1.1的規則,主要用於控制網頁緩存,主要取值為:
public:所有的內容都緩存(客戶端和代理伺服器都可以緩存)
private:所有內容只有客戶端可以緩存(默認值)
no-cache:客戶端緩存內容,但是是否使用緩存則需要經過協商緩存來驗證決定
no-store:即不使用強制緩存,也不使用協商緩存
max-age=xxx:緩存內容將在xxx秒後失效

Expires 是一個絕對值
Cache-Control 中 max-age 是相對值,解決了 Expires時期 服務端與客戶端 可能出現時間差的問題

註:Expires和Cache-Control同時存在時,只有Cache-Control生效

協商緩存就是強制緩存失效後,瀏覽器攜帶緩存標識向伺服器發起請求,由伺服器根據緩存標識決定是否使用緩存的過程

協商緩存的兩種情況:
1、協商緩存生效,返回304,繼續使用緩存
過程:
瀏覽器                 瀏覽器緩存     伺服器

————————發起http請求————————>

<——該請求的緩存結果失效,只返回緩存標識——

————————攜帶該資源的緩存標識,發起http請求————————>

<—————————————304,該資源無更新————————————

——————獲取該請求的緩存結果——————>

<——————返回該請求的緩存結果——————

2、協商緩存失敗,返回200和請求結果
過程:
瀏覽器                 瀏覽器緩存     伺服器

————————發起http請求————————>

<——該請求的緩存結果失效,只返回緩存標識——

————————攜帶該資源的緩存標識,發起http請求————————>

<————————200,資源已更新,重新返回請求和結果———————

——將該請求結果和緩存標識存入瀏覽器緩存中—>

協商緩存的標識也是在響應報文的HTTP頭中和請求結果一起返回給瀏覽器的

控制協商緩存的欄位:
(1) Last-Modified/If-Modified-Since:Last-Modified是伺服器響應請求是,返回該資源文件在伺服器最後被修改的時間;If-Modified-Since再次發起請求時,攜帶上次返回的Last-Modified的值,伺服器將該欄位值與該資源最後修改時間對比,決定是否用緩存
(2)Etag/If-None-Match:Etag伺服器響應請求時,返回當前資源文件的一個唯一標識,由伺服器生成之;If-None-Match是再次發起請求時,攜帶上次返回的唯一標識Etag的值,伺服器收到後,將該欄位值與該資源在伺服器上的Etag對比,一致 則返回304,否則返回200

註:Etag/If-None-Match優先順序高於Last-Modified/If-Modified-Since,同時存在時只有Etag/If-None-Match生效

瀏覽器緩存分為:內存緩存 和 硬碟緩存

內存緩存特性:
(1)快速讀取:內存緩存會將編譯解析後的文件,存入該進程的內存中,便於下次運行時快速讀取
(2)時效性:一旦關閉進程,進程內存清空

硬碟緩存特性:
永久性:直接寫入硬碟文件中
復雜、緩慢:讀取緩存對該緩存存放的硬碟文件進行I/O操作,重新解析

from memory cache:使用內存中的緩存

from disk cache:使用硬碟中的緩存

瀏覽器讀取順序:memory ——> disk

瀏覽器將js和圖片等文件解析執行後直接存入內存緩存中,F5刷新頁面時,from memory cache(使用內存中的緩存)
css文件存入硬碟中,F5刷新頁面時,from disk cache(使用硬碟中的緩存)

參考文章
https://segmentfault.com/a/1190000017962411
https://www.cnblogs.com/chengxs/p/10396066.html

9. 如何正確設置Web緩存

在網路里傳輸的每個文件都有mime類型這是http協議裡面的,伺服器必須正確設置,就是將後綴名不同的文件的mime設置為不同,具體怎麼設置可以上網查詢。
#號後面的是注釋,你隨便寫刪掉也可以,明白么,一般寫上時間和版本是為了調試,因為你改了你的程序文件,瀏覽器還會從緩存裡面獲取,你必須更改你的manifest文件,瀏覽器才會更新本地文件,而更改manifest文件的方式你可以自己定義,最好的方法就是設置注釋每次更改注釋

熱點內容
安卓在哪裡找游戲 發布:2025-07-04 22:15:25 瀏覽:242
路由器訪問光貓 發布:2025-07-04 22:07:47 瀏覽:897
資料庫顯示語句 發布:2025-07-04 22:04:30 瀏覽:740
編程課道具 發布:2025-07-04 22:04:02 瀏覽:844
華為手機不是安卓什麼時候可以更新米加小鎮 發布:2025-07-04 22:01:37 瀏覽:785
飢荒伺服器搭建視頻 發布:2025-07-04 21:48:38 瀏覽:523
github上傳文件夾 發布:2025-07-04 21:29:22 瀏覽:1003
php課程學習中心 發布:2025-07-04 21:29:16 瀏覽:298
win7加密文件夾如何解密 發布:2025-07-04 21:25:24 瀏覽:555
為啥系統緩存的垃圾多呢 發布:2025-07-04 21:15:45 瀏覽:952