Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh memanfaatkan pengepala HTTP dengan berkesan untuk caching dengan PHP?

Bagaimanakah saya boleh memanfaatkan pengepala HTTP dengan berkesan untuk caching dengan PHP?

Susan Sarandon
Susan Sarandonasal
2024-11-04 03:03:29941semak imbas

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

Memahami Caching HTTP dengan Pengepala PHP

S: Apakah pengepala HTTP yang penting untuk cache yang berkesan dengan PHP?

J: Apabila melaksanakan cache HTTP untuk tapak web, pengepala tertentu memainkan peranan penting dalam membimbing pelayar tentang cara mengurus kandungan cache. Pengepala penting termasuk:

  • Pelbagai: Pengepala ini menentukan bahawa kandungan berbeza-beza berdasarkan parameter seperti bahasa atau ejen pengguna, memastikan penyemak imbas mendapatkan semula versi cache yang sesuai.
  • Terakhir Diubah Suai: Menunjukkan kali terakhir kandungan diubah suai. Penyemak imbas membandingkan nilai ini dengan pengepala If-Modified-Since dalam permintaan berikutnya untuk menentukan sama ada kandungan perlu dimuat semula.
  • ETag: Pengepala ini mewakili teg entiti atau checksum kandungan. Pelayar membandingkan nilai ini dengan pengepala Jika-Tiada-Padanan untuk mengelakkan permintaan semula kandungan yang tidak berubah.

Pelaksanaan:

  1. Tetapkan Dasar Cache:

    <code class="php">session_cache_limiter('private_no_expire'); // Allow caching but do not reveal cache expiry time</code>
  2. Set Tamat Tempoh:

    <code class="php">header("Cache-Control: max-age=" . (60 * 60 * 24 * 30)); // Set cache expiration to 30 days</code>
  3. Urus Pengepala If-Modified-Sejak dan Jika-Tiada-Padanan:
    Bandingkan nilai pengepala ini dengan pengepala Last-Modified dan ETag untuk mengelakkan permintaan semula yang tidak perlu:

    <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>

Atas ialah kandungan terperinci Bagaimanakah saya boleh memanfaatkan pengepala HTTP dengan berkesan untuk caching dengan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn