相關:什麼是squid及其配置介紹
主要包括 expires last-modifIEd cache-control
現在線上前面一個硬件的分發服務器,後面兩台nginx服務器,在expires last-modifIEd cache-control 等都設置無誤的情況下 ,對於php文件還有rewrite後的Html文件,還是每次都200,沒有出現304
然後上了一台squid,在同樣設置的情況下,對於rewrite後的Html有效,對於php的緩存仍然無效
附PHP代碼
$sec=1200;
$last_modifIEd_time = intval(time() / $sec) * $sec;
$etag = md5($last_modifIEd_time);
header(“Cache-Control: max-age=$sec”);
header(“Expires: $sec”);
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”, $last_modifIEd_time) . ” GMT”);
header(“Expires:” . gmdate(“D, d M Y H:i:s”, $last_modifIEd_time + $sec) . ” GMT”);
這種是通過nginx或者squid實現的,設置expires是通過php但是再次請求的時候通過nginx和squid等就可以實現304了,無需再次運行PHP文件
另一種通過php實現的方法如下,設置周期內同意etag,PHP通過etag來判斷是否需要304然後中斷
$last_modifIEd_time = intval(time() / $sec) * $sec;
$etag = md5($last_modifIEd_time);
header(“Cache-Control: maxage=$sec”);
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”, $last_modifIEd_time) . ” GMT”);
header(“Etag: $etag”);
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modifIEd_time ||
trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
header(“HTTP/1.1 304 Not ModifIEd”);
exit;
}