協(xié)商緩存和強(qiáng)緩存是HTTP協(xié)議中的兩種不同的緩存機(jī)制,用于優(yōu)化網(wǎng)絡(luò)性能和減少重復(fù)請(qǐng)求。它們?cè)诳蛻舳撕头?wù)器之間進(jìn)行通信,以確定是否使用緩存副本或請(qǐng)求最新資源。
1. 強(qiáng)緩存(Expires和Cache-Control):
- Expires:通過(guò)設(shè)置Expires響應(yīng)頭,服務(wù)器告訴瀏覽器資源的過(guò)期時(shí)間。當(dāng)瀏覽器發(fā)起請(qǐng)求時(shí),如果本地緩存未過(guò)期,瀏覽器將直接使用緩存副本,而無(wú)需再次請(qǐng)求服務(wù)器。
- Cache-Control:通過(guò)設(shè)置Cache-Control響應(yīng)頭,服務(wù)器可以提供更精確的緩存控制。常見(jiàn)的Cache-Control指令包括max-age、public、private、no-cache和no-store等。例如,設(shè)置max-age=3600表示資源在3600秒內(nèi)有效,瀏覽器可以直接使用緩存。
2. 協(xié)商緩存(Last-Modified和ETag):
- Last-Modified:服務(wù)器在響應(yīng)頭中返回資源的最后修改時(shí)間(GMT格式)。當(dāng)瀏覽器再次請(qǐng)求資源時(shí),通過(guò)If-Modified-Since請(qǐng)求頭將上次的最后修改時(shí)間發(fā)送給服務(wù)器。如果資源的最后修改時(shí)間與服務(wù)器上的相同,服務(wù)器返回304 Not Modified響應(yīng),告訴瀏覽器可以使用緩存副本。
- ETag:服務(wù)器在響應(yīng)頭中返回資源的唯一標(biāo)識(shí)符(通常是哈希值)。當(dāng)瀏覽器再次請(qǐng)求資源時(shí),通過(guò)If-None-Match請(qǐng)求頭將上次的ETag發(fā)送給服務(wù)器。如果資源的ETag與服務(wù)器上的相同,服務(wù)器返回304 Not Modified響應(yīng),告訴瀏覽器可以使用緩存副本。
在實(shí)際應(yīng)用中,瀏覽器首先檢查強(qiáng)緩存信息(Expires和Cache-Control),如果緩存仍然有效,則直接使用緩存。如果緩存已過(guò)期,瀏覽器發(fā)送帶有協(xié)商緩存信息(Last-Modified和ETag)的請(qǐng)求到服務(wù)器進(jìn)行驗(yàn)證。如果服務(wù)器返回304 Not Modified響應(yīng),則瀏覽器使用緩存;否則,服務(wù)器返回新的資源內(nèi)容。
綜合使用強(qiáng)緩存和協(xié)商緩存可以減少對(duì)服務(wù)器的請(qǐng)求次數(shù),提高網(wǎng)站的加載速度和性能。