HTTP 笔记与总结(7)HTTP 缓存(配合 Apache 服务器)
在網(wǎng)絡(luò)上,有一些緩存服務(wù)器,另外瀏覽器自身也有緩存功能。
例如:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title> </head> <body><img src="./a.jpg" alt=""> </body> </html>第 1 次訪問該頁(yè)面時(shí),正常下載圖片,返回值是 200:
響應(yīng)頭的抓包分析:
?
?
基于一個(gè)前提——圖片不會(huì)經(jīng)常改動(dòng),服務(wù)器在返回 200 的同時(shí),還返回該圖片的特征值(簽名 ETag),當(dāng)瀏覽器再次訪問該圖片時(shí),就回去服務(wù)器椒鹽 ETag,如果圖片沒有變化,則直接使用緩存中的圖片,減輕了服務(wù)器的負(fù)擔(dān):
響應(yīng)頭的抓包分析:
?自(If-Modified-Since 的)時(shí)間點(diǎn)后圖片修改過,則重新請(qǐng)求;如果圖片最新的簽名(ETag)和上次返回(If-None-Match)的值不匹配,則重新請(qǐng)求。此時(shí)響應(yīng)值是 304,瀏覽器從本地取緩存,節(jié)省了圖片在網(wǎng)絡(luò)上傳輸?shù)臅r(shí)間。
請(qǐng)求頭的 If-None-Match 和 響應(yīng)頭的 Etag 對(duì)應(yīng),請(qǐng)求頭的 If-Modified-Since 和 響應(yīng)頭的 Last-Modified 對(duì)應(yīng)。
?
?
HTTP Cache-Controll 請(qǐng)求頭信息
在大型網(wǎng)站中,如何處理主服務(wù)器和緩存服務(wù)器之間的問題:要不要緩存和緩存多久,需要用到?HTTP Cache-Controll 請(qǐng)求頭信息
步驟:
① 主服務(wù)器需要開啟 mod_expires 模塊(Apache 服務(wù)器)
利用該擴(kuò)展來(lái)控制圖片、css、html 等文件是否緩存以及緩存的生命周期,
?
② 在當(dāng)前目錄下新建 .htaccess 文件
語(yǔ)法:
ExpiresDefault "<base> [plus] {<num> <type>}*" ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"?
后面 4 個(gè)參數(shù)分別表示
base:基于哪個(gè)時(shí)間點(diǎn)來(lái)計(jì)算緩存有效期,有兩個(gè)值:access/now,now 等價(jià)于 access,表示基于請(qǐng)求響應(yīng)的那一瞬間;另一個(gè)值是 modification,表示被請(qǐng)求文件的最后修改日期,比如被修改后的一周內(nèi)仍然有效
?
plus:可選參數(shù)
?
num:緩存時(shí)間的大小(30)
?
type:緩存時(shí)間的單位(天)
?
【例】
給 jpg 圖片設(shè)置 1 個(gè)月的生存周期
.htaccess:
ExpiresActive On ExpiresByType image/jpeg "access plus 1 month"執(zhí)行頁(yè)面,抓包分析:
如果在集群環(huán)境中,緩存服務(wù)器得到此圖片,將會(huì)認(rèn)為在一個(gè)月內(nèi)有效,減輕了主服務(wù)器的負(fù)擔(dān)。
?
?
設(shè)置服務(wù)器不讓用緩存
比如有些個(gè)人信息不允許緩存服務(wù)器緩存,必須到主服務(wù)器請(qǐng)求。
可以利用 apache 服務(wù)器的 mod_headers 模塊?
?
在 .htaccess 中追加信息
.htaccess:
ExpiresActive On ExpiresByType image/jpeg "access plus 1 month"<FileMatch "\.(gif|png)$"> header set Cache-Controll "no-store,must-revalidate" <FileMatch>使用正則表達(dá)式,設(shè)置當(dāng)圖片是 gif 或 png 格式的圖片時(shí),不允許緩存。
?
修改 cache-01.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title> </head> <body><img src="./a.jpg" alt=""><img src="./php.gif" alt=""> </body> </html>執(zhí)行文件,抓包分析:
多次刷新頁(yè)面,php.gif 的響應(yīng)值都是 200。
?
新浪微博(不允許緩存)的抓包圖:
?
總結(jié)
以上是生活随笔為你收集整理的HTTP 笔记与总结(7)HTTP 缓存(配合 Apache 服务器)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.ansible中常用模块
- 下一篇: centos配置ssh免密码登录后仍要输