當前位置:
首頁 > 最新 > 使用HTTP緩存狀態碼200和304提升網站訪問速度

使用HTTP緩存狀態碼200和304提升網站訪問速度

網站訪問速度對一個網站來說是非常重要的,訪問慢會流失用戶,訪問快會大大的提高用戶體驗。提升網站訪問速度的方式很多,比如這裡提升PHP程序運行速度的幾個優化方案,但火端今天要介紹的是HTTP緩存,也可以叫瀏覽器緩存。

瀏覽器緩存大概有兩種,和各有各的優勢,把他們發揮好可以大大的提升訪問速度。

1、200 OK (from memory/disk cache)

這種緩存方式已經很普遍,大部分網站的靜態文件都採用了,200 OK (from memory cache)或者200 OK (from disk cache)都是直接讀取客戶端的緩存,無需再請求伺服器。一般是在Apache或者Nginx里設置,比如Nginx配置里會有類似這樣的配置:

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

{

expires 30d;

}

location ~ .*.(js|css)?$

{

expires 12h;

}

這樣就可以給靜態文件緩存了,在有效期內,瀏覽器會直接讀取客戶端的緩存,而不用再請求伺服器,除非用戶清除了緩存或者使用Ctrl+F5強制刷新了頁面。

比如上圖,是已經緩存過了的,至於有些是200 OK (from memory cache)有些會是200 OK (from disk cache)都差不多,只是從客戶端取的位置不一樣而已。除了給靜態文件做200 OK (from cache)緩存外,其實我們也可以給某些頁面做,比如一些不經常改變內容的ajax頁面。

舉個例子:

一個在線手冊網站,左側是導航,用戶瀏覽手冊時可能會頻繁在不同的文檔頁面來回切換,如果不啟用HTTP緩存,體驗會非常差,如果使用Ajax切換,再加上200 OK (from cache)就可以做到快速切換了,無刷新、無白屏,體驗棒棒噠!

200緩存能大大的提升速度,但是如果網站內容有更新,訪客是無法及時的獲取最新的內容。這時候我們一般是採用在靜態文件後面加參數來解決,比如 /statis/js/jquery.js?20180505 ,因為是一個新的URL,所以瀏覽器沒有緩存可取,只能取新內容。

2、304 Not Modified

304緩存和上面最大的區別是瀏覽器需要向伺服器詢問一次,如果伺服器端認為沒有內容更新,直接返回304狀態碼,無需返回body內容,瀏覽器就會直接取緩存內容輸出,這樣省掉了沒必要的數據傳輸,也就提升了訪問速度。

要實現304緩存,我們需要在瀏覽器首次訪問時返回過期時間等header,比如如下PHP代碼:

$time=86400; //單位秒

header("Cache-Control:max-age=" . $time);

header("Expires: " . gmdate("D, d M Y H:i:s", time() + $time) . " GMT");

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

上面的代碼就告訴了瀏覽器緩存時間,下次瀏覽器再訪問該頁面的時候會帶上名叫的請求頭來訪問,這時候我們可以用PHP變數:來獲取瀏覽器記錄的緩存時間,如果沒有內容更新,我們直接返回304狀態碼即可,如果有更新直接輸出新內容,並返回新的過期時間給瀏覽器。大概的代碼如下:

$time = 86400;

if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])){

$is_update=0;//判斷是否有更新

if($c_time > time()){

header("Cache-Control:max-age=".$time);

header("Expires: " . gmdate("D, d M Y H:i:s",time()+$time)." GMT");

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

header("HTTP/1.1 304 Not Modified");

exit();

}

}

header("Cache-Control:max-age=" . $time);

header("Expires: " . gmdate("D, d M Y H:i:s", time() + $time) . " GMT");

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

具體使用還需要考慮一些其它問題,本站就已經在很多頁面使用了304緩存功能,返回狀態如下圖:

如何來判斷伺服器內容是否有更新有很多種方式,比如Etag功能就可以,關於Etag的介紹可以百度下。網站訪問速度很重要,能快一點,就讓它快一點吧!搞網站就在於折騰,哈!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 火端網路 的精彩文章:

TAG:火端網路 |