共用方式為


升級 ASP.NET Core Blazor 應用程式時避免 HTTP 快取問題

備註

這不是本文的最新版本。 關於目前版本,請參閱 本文的 .NET 10 版本

警告

不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。

本文說明如何在升級 Blazor 應用程式時避免 HTTP 快取問題。

當應用程式升級或設定不正確時 Blazor ,可能會導致現有使用者無法無縫升級。 本文討論跨主要版本升級應用程式時 Blazor 可能發生的一些常見 HTTP 快取問題。 它還提供了一些建議的操作,以確保使用者順利過渡。

雖然未來的 Blazor 版本可能會提供更好的解決方案來處理 HTTP 快取問題,但最終取決於應用程式是否正確配置快取。 正確的緩存配置可確保應用程式的用戶始終擁有最新的版本,從而提升使用體驗並降低遇到錯誤的機率。

對使用者升級體驗產生負面影響的常見問題包括:

  • 專案和套件更新的處理不正確:這種情況會發生在您未將應用程式的所有已部署專案更新至相同的主要架構版本,或當主要升級提供較新版本時,您仍在使用舊版的套件。
  • 快取標頭設定不正確:HTTP 快取標頭可控制應用程式回應的快取方式、位置和時間長度。 如果標頭設定不正確,使用者可能會收到過時或不相符的檔案。 這包括 Blazor 套件資產快取,其中必須正確設定伺服器快取標頭,以避免用戶端上的快取問題。
  • 其他層的設定不正確:如果設定不正確,內容傳遞網路 (CDN) 和已部署應用程式的其他層可能會導致問題。 例如,CDN 旨在快取和交付內容,以提高效能並減少延遲。 如果CDN不正確地提供資產的快取版本,可能會導致向使用者傳遞過時的內容。

偵測和診斷升級問題

升級問題通常顯示為無法在瀏覽器中啟動應用程式。 通常,警告表示存在過時的資產,或遺失或與應用程式不一致的資產。

  • 首先,檢查應用程式是否在乾淨的瀏覽器實例中成功載入。 使用私人瀏覽器模式載入應用程式,例如 Microsoft Edge InPrivate 模式或 Google Chrome 無痕模式。 如果應用程式無法載入,則可能表示一或多個套件或架構未正確更新。
  • 如果應用程式在乾淨的瀏覽器執行個體中正確載入,則應用程式很可能是從過時的快取中提供。 在大部分情況下,使用 Ctrl+F5 進行硬式瀏覽器重新整理會排清快取,讓應用程式能夠載入並使用最新的資產執行。
  • 如果應用程式繼續失敗,則可能是過時的 CDN 快取正在為應用程式提供服務。 嘗試透過 CDN 提供者提供的任何機制來刷新 DNS 快取。

先前應用程式的提供流程可能會讓更新過程更具挑戰。 例如,過去避免使用或錯誤配置快取標頭可能會導致使用者目前出現快取問題。 您可以採取下列各節中的動作來緩解問題並改善使用者的升級程式。

將架構套件與架構版本對齊

請確定架構套件與架構版本一致。 當有較新版本可用時,使用舊版的套件可能會導致相容性問題。 確保應用程式的所有已部署專案都使用相同的主要架構版本也很重要。 這種一致性有助於避免意外行為和錯誤。

檢查是否存在正確的 HTTP 快取標頭

正確的快取標頭應該出現在對資源請求的回應中。 這包括 ETagCache-Control 和其他快取標頭。 這些標頭的設定取決於裝載服務或裝載伺服器平台。 它們對於指令碼和指令碼下載的任何內容等Blazor資產特別重要。

不正確的 HTTP 快取標頭也可能影響服務工作者。 Service Workers 依賴快取標頭來有效管理快取資源。 因此,不正確或遺失的標頭可能會中斷服務工作者的功能。

用於 Clear-Site-Data 刪除瀏覽器中的狀態

考慮使用Clear-Site-Data 標頭來刪除瀏覽器中的狀態。

通常快取狀態問題的來源僅限於HTTP瀏覽器緩存,因此使用 cache 指令應該足夠。 此動作有助於確保瀏覽器從伺服器擷取最新的資源,而不是從快取中提供過時的內容。

您可以選擇性地包含 storage 指示詞,以在清除 HTTP 瀏覽器快取的同時清除本機儲存體快取。 不過,如果使用 storage 指令,使用用戶端儲存體的應用程式可能會遺失重要資訊。

將查詢字串附加至 Blazor 指令碼標籤

如果先前建議的動作都無效、可用於部署或套用至您的應用程式,請考慮暫時將查詢字串附加至 Blazor 指令碼的 <script> 標籤來源。 在大多數情況下,此操作應該足以強制瀏覽器繞過本地 HTTP 緩存並下載新版本的應用程序。 不需要在應用程式中讀取或使用查詢字串。

在下列範例中,查詢字串 temporaryQueryString=1 會暫時套用至 <script> 標籤的相對外部來源 URI:

<script src="_framework/blazor.webassembly.js?temporaryQueryString=1"></script>

應用程式的所有使用者重新載入應用程式之後,就可以移除查詢字串。

或者,您可以套用具有相關版本設定的持續性查詢字串。 下列範例假設應用程式的版本符合 .NET 發行版本 (8 適用於 .NET 8):

<script src="_framework/blazor.webassembly.js?version=8"></script>

如需指令碼Blazor標籤的位置<script>,請參閱 ASP.NET 核心Blazor專案結構