頁或使用者控制項的可緩衝性定義可以在什麼樣的 HTTP 1.1 Internet 裝置上緩衝文檔。這些裝置包括髮出請求的用戶端,響應請求的 Web 服務器,以及請求或響應流中任何具有緩衝功能的裝置(例如Proxy 伺服器)。當 Web 服務器發送響應時,在它傳遞的所有資訊中包括一個 Cache-Control HTTP 標題,該標題定義可在其上緩衝文檔的裝置。ASP.NET 在 HttpCacheability 枚舉中定義這些值。該枚舉具有六個值,其中四個值直接映射為 Cache-Control HTTP 標題設定,另外兩個特殊值分別為 HttpCacheability.ServerAndPrivate 和 HttpCacheability.ServerAndNoCache。ServerAndPrivate 只允許將響應緩衝在原伺服器和請求用戶端上。而 ServerAndNoCache 只允許將響應緩衝在原伺服器上。
根據應用程式的需要,您可以選擇定義哪些裝置可以緩衝特定的頁,哪些裝置不能緩衝特定的頁。例如,您可能希望使用者登入頁的可緩衝性設定不同於顯示產品選擇的目錄頁。對於登入頁,出於安全方面的考慮,您可能希望只將頁緩衝在伺服器上,而目錄頁可以緩衝在任何支援緩衝的裝置上。
通過將 Location 屬性包括在 @ OutputCache 指令中並指定一個 OutputCacheLocation 枚舉值,可以以聲明方式設定頁輸出的可緩衝性。
通過使用 HttpCachePolicy.SetCacheability 方法指定頁的 HttpCacheability 值,您可以以編程方式設定頁輸出的可緩衝性。通過 HttpResponse.Cache 屬性可以訪問該方法,而使用頁的程式碼後置類別或代碼聲明塊中的 Response.Cache 文法可以訪問該屬性。
注意 如果使用 @ OutputCache 指令設定頁的可緩衝性,則您必須連同 Location 屬性一起聲明 Duration 和 VaryByParam 屬性。必須將 Duration 屬性設定為大於零的值。如果您不想使用 VaryByParam 屬性所提供的功能,則可以將其屬性設定為 none。有關更多資訊,請參見設定頁緩衝的到期時間和快取頁面的多個版本。
相比之下,如果使用 HttpCachePolicy 類設定可緩衝性,如果已建立了驗證策略,則您不需要設定到期時間。
以聲明方式設定頁的可緩衝性
- 將 @ OutputCache 指令包括在 .aspx 檔案中並定義必需的 Duration 和 VaryByParam 屬性。
- 將 Location 屬性包括在 @ OutputCache 指令中並將其值定義為受支援的值之一。這些值包括 Any、Client、Downstream、Server 或 None。
注意 預設值為 Any。如果未定義 Location 屬性,則可以將頁輸出緩衝在與響應有關的所有具有緩衝功能的網路應用程式上。其中包括請求用戶端、原伺服器、以及響應通過的任何Proxy 伺服器。
以編程方式設定頁的可緩衝性
- 在頁的代碼聲明塊或程式碼後置類別檔案中,使用 Response.Cache 文法來訪問 HttpCachePolicy.SetCacheability 方法。下面的代碼將 Cache-Control HTTP 標題設定為 Public。
[C#] Response.Cache.SetCacheability(HttpCacheability.Public);[Visual Basic] Response.Cache.SetCacheability(HttpCacheability.Public)
注意 如果將可緩衝性設定為 HttpCacheability.NoCache 或 HttpCacheability.ServerAndNoCache,則請求的用戶端不會將頁緩衝在其“記錄”檔案夾中。例如,使用者無論何時單擊向後或向前按鈕,都請求響應的新版本。通過將 HttpCachePolicy.SetAllowResponseInBrowserHistory 方法設定為 true,可以重寫此行為。
[C#] Response.Cache.SetAllowResponseInBrowserHistory(true);[Visual Basic] Response.Cache.SetAllowResponseInBrowserHistory(true)
如果將可緩衝性設定為 NoCache 或 ServerAndNoCache 以外的其他任何值,則 ASP.NET 將忽略 SetAllowResponseInBrowserHistory 方法所設定的值。