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

ASP.NET 效能優化系列:善用 Cache-Control 與 Last-Modified 徹底減少 HTTP 請求

     編輯:ASP.NET 基礎

瀏覽器快取是前端效能優化的關鍵。本文詳細說明如何在 IIS 設定靜態檔案快取、在動態頁面程式碼輸出快取標頭、區分 F5/網址列重新整理/Ctrl+F5 的不同行為,並提供 Web.config 批次設定與關閉快取範例。

核心概念:Cache-Control vs Last-Modified

機制觸發條件網路交互適用場景
Last-Modified / If-Modified-SinceF5 重新整理有 (304 Not Modified)動態內容版本控制
Cache-Control: max-age網址列 Enter / 超連結導航無 (瀏覽器直接讀快取)靜態資源、不常變動頁面
Ctrl+F5強制重新整理有 (200 OK 全內容)除錯、強制更新

一、靜態檔案快取:IIS 圖形介面設定

  1. IIS 管理員 → 選取網站/資料夾/檔案 → 右鍵「屬性」
  2. 「HTTP 標頭」分頁 → 勾選「啟用內容過期」 → 設定「過期時間」如 1 分鐘
  3. HTTP 回應標頭將包含:Cache-Control: max-age=60

二、靜態檔案快取:Web.config 批次設定

<system.webServer>
  <staticContent>
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="0.00:01:00" /> <!-- 1 分鐘 -->
  </staticContent>
</system.webServer>

三、關閉特定檔案/資料夾快取

<location path="test2.htm">
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="DisableCache" />
    </staticContent>
  </system.webServer>
</location>

四、動態頁面 (.aspx) 程式碼輸出快取標頭

protected void Page_Load(object sender, EventArgs e)
{
    // 1. Cache-Control: max-age=60 → 瀏覽器 60 秒內不發請求
    Response.AddHeader("Cache-Control", "max-age=60");

    // 2. Last-Modified → 處理 F5 重新整理
    Response.AddHeader("Last-Modified", DateTime.Now.ToString("R")); // RFC1123 格式

    // 3. 手動處理 If-Modified-Since → 回傳 304
    DateTime ifModifiedSince;
    if (DateTime.TryParse(Request.Headers["If-Modified-Since"], out ifModifiedSince))
    {
        // 注意:HTTP 標頭時間為 UTC,本地時間需轉換
        if ((DateTime.Now - ifModifiedSince.AddHours(8)).TotalSeconds < 60)
        {
            Response.StatusCode = 304;
            Response.StatusDescription = "Not Modified";
            Response.End();
        }
    }
}

五、動態頁面:OutputCache 宣告式設定

<%@ OutputCache Duration="60" Location="Client" VaryByParam="none" %>

或在 Web.config 定義快取設定檔:

<system.web>
  <caching>
    <outputCacheSettings>
      <outputCacheProfiles>
        <add name="Cache1Min" duration="60" location="Client" varyByParam="none" />
      </outputCacheProfiles>
    </outputCacheSettings>
  </caching>
</system.web>

<!-- 頁面引用 -->
<%@ OutputCache CacheProfile="Cache1Min" %>

實測結果對照 (HttpWatch)

IIS 設定快取 HTTP 標頭含 Cache-Control 各種重新整理行為對照 動態頁面程式碼控制結果

關鍵提醒

  • Response.Cache.SetMaxAge() 會導致遺失 304 支援,建議直接用 AddHeader 精確控制
  • favicon.ico:網站根目錄務必放置,否則瀏覽器反覆 404 請求造成效能損耗
  • 核心思想:將瀏覽器視為網站快取架構的重要一環,善用客戶端快取減少伺服器負載
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved