首頁 >後端開發 >php教程 >如何透過 PHP 有效利用 HTTP 標頭進行快取?

如何透過 PHP 有效利用 HTTP 標頭進行快取?

Susan Sarandon
Susan Sarandon原創
2024-11-04 03:03:291045瀏覽

How can I effectively leverage HTTP headers for caching with PHP?

了解 PHP 標頭的 HTTP 快取

問:哪些 HTTP 標頭對於 PHP 的有效快取至關重要?

A: 在為網站實作 HTTP 快取時,特定標頭在指導瀏覽器如何管理快取內容方面發揮著至關重要的作用。基本標頭包括:

  • Vary: 此標頭指定內容根據語言或用戶代理等參數而變化,確保瀏覽器檢索適當的快取版本。
  • Last-Modified: 表示內容最後一次修改時間。瀏覽器會將此值與後續請求中的 If-Modified-Since 標頭進行比較,以確定內容是否需要刷新。
  • ETag: 此標頭表示內容的實體標記或校驗和。瀏覽器會將此值與 If-None-Match 標頭進行比較,以避免重新要求未變更的內容。

實作:

  1. 設定快取策略:

    <code class="php">session_cache_limiter('private_no_expire'); // Allow caching but do not reveal cache expiry time</code>
  2. 設定過期時間:

    <code class="php">header("Cache-Control: max-age=" . (60 * 60 * 24 * 30)); // Set cache expiration to 30 days</code>

  3. <code class="php">$tsstring = gmdate('D, d M Y H:i:s ', $timestamp) . 'GMT';
    $etag = $language . $timestamp;
    
    $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
    $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false;
    
    if ((($if_none_match && $if_none_match == $etag) || (!$if_none_match)) &&
        ($if_modified_since && $if_modified_since == $tsstring))
    {
        header('HTTP/1.1 304 Not Modified');
        exit();
    }
    else
    {
        header("Last-Modified: $tsstring");
        header("ETag: \"{$etag}\"");
    }</code>
管理If-Modified-Since 和If-None-Match標頭:將這些標頭的值與 Last-Modified 和 ETag 標頭進行比較,以避免不必要的重新請求:

以上是如何透過 PHP 有效利用 HTTP 標頭進行快取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn