警告
已淘汰、不受支援的 Internet Explorer 11 傳統型應用程式已於特定 Windows 10 版本透過 Microsoft Edge 更新永久停用。 如需詳細資訊,請參閱 Internet Explorer 11 傳統型應用程式淘汰常見問題集 (英文)。
本文說明使用 HTTP 標頭來控制 Internet Explorer 中網頁的快取。
原始產品版本: Internet Explorer
原始 KB 編號: 234067
摘要
您可以使用 Microsoft 網際網路資訊伺服器(IIS),在特定的 Active Server 頁面(ASP)頁面的最前面,使用下列腳本輕鬆標示高度不穩定或敏感的頁面:
<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>
到期日和到期標頭
強烈建議所有網站伺服器採用方法來設置網頁到期時間。 網頁伺服器若不透過 HTTP Expires 回應標頭向要求的用戶端提供每個資源的到期資訊,這是不良的作法。 現今大部分的瀏覽器和中繼 Proxy 都遵守這項到期資訊,並用它來提升透過網路通訊的效率。
一律使用 Expires 標頭來指定用戶端需要更新伺服器上特定檔案的最合理時間。 當頁面定期更新時,更新的下一個期間是最有效率的回應。 例如,在互聯網上一個每天早上 5 點更新的每日新聞頁面。此新聞頁面的網頁伺服器應該返回一個Expires標頭,其值設為第二天早上 5 點。 完成後,瀏覽器不需要再次連絡網頁伺服器,直到頁面變更為止。
預計不會變更的頁面應該標示大約一年的到期日。
在許多情況下,網頁伺服器在伺服器上有一或多個變動性頁面,其中包含可能立即變更的資訊。 這些頁面應該由伺服器標記 Expires 標頭的值為 "-1"。 用戶在未來提出要求時,Internet Explorer 通常會透過條件式 If-Modified-Since 請求與網頁伺服器聯絡以更新該頁面。 不過,頁面會保留在磁碟快取中(暫存因特網檔案)。 而且頁面會在適當情況下使用,而不需要連絡遠端 Web 伺服器,例如:
- 當 BACK 和 FORWARD 按鈕用來存取瀏覽歷程記錄時。
- 當瀏覽器處於離線模式時。
Cache-Control 標頭
不過,某些頁面如此易變或敏感,因此不進行磁碟快取。 為此,Internet Explorer 支援 HTTP 1.1 Cache-Control 標頭。 當 HTTP 1.1 伺服器指定無快取值時,此標頭會防止特定 Web 資源的所有快取。
只有瀏覽器能重新連上Web伺服器時,才能存取那些不在快取中的頁面。 因此,伺服器應該謹慎使用 Cache-Control 標頭。 在大部分情況下,偏好使用Expires: -1。
「Pragma: No-Cache」標頭
不幸的是,舊版 HTTP 1.0 伺服器無法使用 Cache-Control 標頭。 為了與 HTTP 1.0 伺服器的回溯相容性,Internet Explorer 支援 HTTP Pragma:no-cache 標頭的特殊用法。 如果用戶端透過安全連線 (https://) 與伺服器通訊,而且伺服器會傳回具有回應的 Pragma:no-cache 標頭,Internet Explorer 不會快取回應。
不過,Pragma:no-cache 標頭並非基於此目的。 根據 HTTP 1.0 和 1.1 規格,此標頭只會在要求的內容中定義,而不是回應。 它適用於可能會防止某些重要要求到達目的地 Web 伺服器的 Proxy 伺服器。 對於未來的應用程式,Cache-Control 標頭是控制快取的適當方法。
HTTP-EQUIV META 標記
HTML 頁面可以使用 HTTP-EQUIV 形式的 META 標籤,以便在 HTML 文件中指定特定的 HTTP 標頭。 以下是使用 Pragma:no-cache 和 Expires: -1 的簡短範例 HTML 頁面:
<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</HEAD>
<BODY>
</BODY>
</HTML>
Pragma:no-cache 只會防止在透過安全連線使用時進行快取。 Pragma:no-cache META 標籤在非安全頁面上的處理方式與 Expires:-1 相同。 頁面將會被快取,但會被標示為立即過期。
Cache-Control META HTTP-EQUIV 標籤會被忽略,且在 Internet Explorer 第 4 版或 5 版中沒有任何作用。 若要使用 Cache-Control,必須使用 HTTP 標頭來指定此標頭,如上述 Cache-Control 一節所述。
注意
標準 HTTP 標頭的使用比 META 標記更慣用。 META 標記通常必須出現在 HTML HEAD 區段頂端。 而且 Pragma HTTP-EQUIV META 標記至少有一個已知問題。
用於快取的伺服器選項
當非 ASP 頁面上需要使用 Cache-Control 標頭時,可能需要使用伺服器組態中的選項來自動新增此標頭。 若要將 HTTP 標頭加入伺服器回應中以指定目錄,請參閱伺服器文件的相關資訊。 例如,在 IIS 4 中,請遵循下列步驟:
- 啟動 IIS 管理員。
- 在計算機和服務樹狀目錄中,開啟預設網頁伺服器或有問題的網頁伺服器。 尋找包含需要 Cache-Control 標頭內容的目錄。
- 開啟該目錄的 [ 屬性 ] 對話框。
- 選取 HTTP 標頭 索引標籤。
- 選取 [自定義 HTTP 標頭] 群組中的 [ 新增 ] 按鈕,然後針對標頭名稱新增 Cache-Control,並針對標頭值新增無快取。
在整個 Web 伺服器上全域使用此標頭並不是個好主意。 將其使用限制於絕對不能在用戶端快取的內容。
問題檢查清單
如果您已套用本文中的技術,但仍有快取和 Internet Explorer 的問題,請先檢閱此方便的檢查清單,再連絡Microsoft以取得技術支持協助:
- 您是否使用 Cache-Control 標頭搭配 ASP
Response.CacheControl屬性或透過傳回的 HTTP 標頭? 這是唯一真正能防止 Internet Explorer 快取的方法。 - 您是否使用 Internet Explorer 4.01 Service Pack 2 或更高版本? 無法完全避免瀏覽器舊版本的快取。
- 您是否仔細檢查 Web 伺服器是否已開啟 HTTP 1.1,並傳回對 Internet Explorer 的 HTTP 1.1 回應? HTTP 1.0 回應中的快取控制標頭無效。
- 如果您於伺服器端使用 CGI/ISAPI/Servlet,您是否完全按照 HTTP 1.1 規格進行操作,特別是關於 HTTP 標頭的 CRLF 終止? 為了強化效能,Internet Explorer 通常對於違反 HTTP 1.1 規格的回應非常嚴格。 它通常會導致標頭被忽略或出現未預期的伺服器錯誤。
- HTTP 標頭拼字是否正確?
另請參閱
- 如需 HTTP 1.1 通訊協定的詳細資訊,請參閱此外部連結: RFC 2616。
- IIS 中的用戶端快取