首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 瀏覽器緩存控制完全指南:Header 策略與實戰場景

     編輯:PHP 相關知識

善用 HTTP 快取標頭,能大幅減少伺服器請求、提升頁面載入速度。但快取也是雙面刃:靜態資源宜快取,動態內容卻須即時更新。本文系統梳理 PHP 控制瀏覽器快取的核心 Header、常見誤區與實戰策略。

核心快取 Header 對照表

Header用途典型值範例
Cache-Control主控快取行為(HTTP 1.1)max-age=86400, must-revalidate(24 小時)
Expires絕對過期時間(HTTP 1.0 相容)gmdate('D, d M Y H:i:s', time()+86400).' GMT'
Last-Modified資源最後修改時間,配合條件請求gmdate('D, d M Y H:i:s').' GMT'
Pragma: no-cache禁用快取(HTTP 1.0 相容)僅作為備援

啟用快取:靜態頁面範例

<?php
// 快取 24 小時
header('Cache-Control: max-age=86400, must-revalidate');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');

echo '此內容將被瀏覽器快取 24 小時';
?>

瀏覽器在快取有效期內「前進/後退」或點擊連結,直接讀取本地快取(網路面板顯示灰色 304/from disk cache),不發起實際請求。

禁用快取:動態頁面/敏感資料

<?php
// HTTP 1.1
header("Cache-Control: no-cache, must-revalidate");
// HTTP 1.0 相容
header("Pragma: no-cache");
?>

每次請求均向伺服器取得最新內容,適用於後台管理、即時數據、用戶專屬頁面。

實戰進階技巧

1. 靜態資源版本號(Cache Busting)

JS/CSS 檔案更新後,瀏覽器可能仍讀取舊快取。解法:在 URL 附加版本參數:

<script src="app.js?v=20240115"></script>
<link rel="stylesheet" href="style.css?v=20240115">

檔案內容變更時更新版本號,強制瀏覽器重新下載。

2. Apache/Nginx 層面統一配置

對於圖片、字體、CSS/JS 等靜態資源,建議在 Web 伺服器層面統一設定長效快取(如 expires 1y),減輕 PHP 處理壓力。

3. 壓縮傳輸(Gzip/Br)

啟用 ob_gzhandler 或 Apache mod_deflate,可將文字內容壓縮 60-85%,大幅降低頻寬:

<?php
// PHP 層面啟用輸出壓縮
ob_start('ob_gzhandler');
?>

或在 php.ini:output_handler = ob_gzhandler。

快取失效的三大觸發條件

  1. 快取過期(max-age/Expires 到期)
  2. 使用者手動清除快取
  3. 強制重新整理(F5 / Ctrl+F5,瀏覽器行為略有差異)

掌握快取策略,讓效能優化事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved