2018年9月1日 星期六

php 設置網頁過期時間

$max_age = $expiration - $_SERVER['REQUEST_TIME'];

// $_SERVER['HTTP_IF_MODIFIED_SINCE'] (If-Modified-Since)瀏覽器對cache的詢問
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $last_modified <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
    $this->set_status_header(304);
    exit;
}

// 編輯提示
header('Pragma: public|no-cache');

// http1.1的 cahe control
header('Cache-Control: max-age=' . $max_age . ', public');

// 過期時間
header('Expires: ' . gmdate('D, d M Y H:i:s', $expiration) . ' GMT');
      
// 最後修改時間(若最後編輯時間比cache更接近,就停用 cache)
header('Last-modified: ' . gmdate('D, d M Y H:i:s', $last_modified) . ' GMT');

  1. ExpiresCache-Control: max-age決定這份快取的「新鮮度」,也就是什麼時候「過期」。在過期之前,瀏覽器「不會」發送出任何 Request
  2. 當快取過期之後,可以用If-Modified-Since或是If-None-Match詢問 Server 有沒有新的資源,如果有的話就回傳新的,沒有的話就回傳 Status code 304,代表快取裡面的資源還能繼續沿用