一、瀏覽器緩存機(jī)制 對(duì)于,如何說(shuō)明緩存機(jī)制,在網(wǎng)絡(luò)上找到了兩張圖,個(gè)人認(rèn)為思路是比較清晰的。總結(jié)時(shí),上圖。 這里需要注意的有兩點(diǎn): 1、Last-Modified、Etag是響應(yīng)頭里的數(shù)據(jù) 2、If-None-Match、If-Modified-Since是請(qǐng)求頭里的數(shù)據(jù) Last-Modified/If-Modified-Since這種搭配,好像已經(jīng)過(guò)時(shí)了。在測(cè)試時(shí),就是關(guān)掉etag,并時(shí)間過(guò)期了,服務(wù)器也照樣返回304。 Etag/If-None-Match這種搭配,還挺好用的。測(cè)試時(shí),可用。那就解釋下什么是etag?什么是if-none-match? etag:當(dāng)前資源的唯一標(biāo)識(shí)。是文件的索引節(jié)、文件大小、文件創(chuàng)建時(shí)間組合的hash。 if-none-match:這就是上面etag的copy。但是,請(qǐng)求服務(wù)器時(shí),如果發(fā)現(xiàn)if-none-match與etag不對(duì)應(yīng)時(shí),就說(shuō)明文件被修改了,這時(shí)返回200,重新獲取文件,沒(méi)修改則返回304,繼續(xù)使用緩存文件。 二、Apache設(shè)置緩存 使用Apache的.htaccess設(shè)置緩存有三種方法 第一種方法: 在Apache開(kāi)啟mod_expires.so模塊 在配置文件中打開(kāi):LoadModule expires_module modules/mod_expires.so 在.htaccess添加以下內(nèi)容 - <IfModule mod_expires.c>
- #打開(kāi)緩存
- ExpiresActive On
- #默認(rèn)對(duì)所有資源緩存600秒
- ExpiresDefault A600
- #png格式的資源緩存5秒
- ExpiresByType image/png A5
- #jpg格式的資源緩存50秒
- ExpiresByType image/jpg A50
- #好含這些后綴的資源,都緩存100秒
- <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
- ExpiresDefault A100
- </FilesMatch>
- </IfModule>
復(fù)制代碼第二種方法: 在Apache開(kāi)啟mod_headers模塊 去配置文件中添加以下內(nèi)容: LoadModule headers_module modules/mod_headers.so 在.htaccess中添加內(nèi)容: - #包含這些后綴的資源都緩存33秒
- <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf)$">
- Header set Cache-Control "max-age=33"
- </FilesMatch>
復(fù)制代碼第三種方法: 在.htaccess添加以下內(nèi)容: - FileEtag INode Mtime Size
復(fù)制代碼要關(guān)閉etag,則添加以下內(nèi)容:
基于Apache的瀏覽器緩存機(jī)制與緩存設(shè)置方法 |