Избегайте проблем с кэшированием HTTP при обновлении приложений ASP.NET Core Blazor
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 9 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 9 этой статьи.
При Blazor неправильном обновлении или настройке приложений может привести к неисправным обновлениям для существующих пользователей. В этой статье рассматриваются некоторые распространенные проблемы с кэшированием HTTP, которые могут возникать при обновлении Blazor приложений в основных версиях. Он также предоставляет некоторые рекомендуемые действия для обеспечения плавного перехода для пользователей.
В то время как будущие Blazor выпуски могут предоставлять лучшие решения для решения проблем с кэшированием HTTP, это в конечном итоге до приложения, чтобы правильно настроить кэширование. Правильная конфигурация кэширования гарантирует, что пользователи приложения всегда имеют самую актуальную версию приложения, повышая их интерфейс и уменьшая вероятность возникновения ошибок.
Распространенные проблемы, которые негативно влияют на взаимодействие с обновлением пользователей, включают:
- Неправильная обработка обновлений проекта и пакетов. Это происходит, если вы не обновляете все развернутые проекты приложения, чтобы использовать ту же основную версию платформы или если вы используете пакеты из предыдущей версии, когда более новая версия доступна в рамках основного обновления.
- Неправильной конфигурации заголовков кэширования: заголовки кэширования HTTP управляют способом, где и как долго кэшируются ответы приложения. Если заголовки настроены неправильно, пользователи могут получать устаревшее содержимое.
- Неправильной конфигурации других слоев: сеть доставки содержимого (CDN) и другие слои развернутого приложения могут вызвать проблемы при неправильной настройке. Например, CDN предназначены для кэширования и доставки содержимого для повышения производительности и уменьшения задержки. Если CDN неправильно обслуживает кэшированные версии ресурсов, это может привести к устаревшей доставке содержимого пользователю.
Обнаружение и диагностика проблем с обновлением
Проблемы с обновлением обычно отображаются как сбой запуска приложения в браузере. Как правило, предупреждение указывает на наличие устаревшего ресурса или ресурса, который отсутствует или не согласуется с приложением.
- Сначала проверьте, успешно ли приложение загружается в чистом экземпляре браузера. Используйте режим частного браузера для загрузки приложения, например режима Microsoft Edge InPrivate или режима Google Chrome Incognito. Если приложение не загружается, скорее всего, это означает, что один или несколько пакетов или платформа не была правильно обновлена.
- Если приложение загружается правильно в чистом экземпляре браузера, скорее всего, приложение обслуживается из устаревшего кэша. В большинстве случаев жесткое обновление браузера с помощью CTRL+F5 очищает кэш, что позволяет приложению загружать и запускать с помощью последних ресурсов.
- Если приложение продолжает завершать ошибку, скорее всего, устаревший кэш CDN обслуживает приложение. Попробуйте очистить кэш DNS с помощью любого механизма, который предлагает поставщик CDN.
Рекомендуемые действия перед обновлением
Предыдущий процесс обслуживания приложения может сделать процесс обновления более сложным. Например, предотвращение или неправильное использование заголовков кэширования в прошлом может привести к текущим проблемам кэширования для пользователей. Вы можете выполнить действия, описанные в следующих разделах, чтобы устранить проблему и улучшить процесс обновления для пользователей.
Выравнивание пакетов платформы с версией платформы
Убедитесь, что пакеты платформы соответствуют версии платформы. Использование пакетов из предыдущей версии, когда доступна более новая версия, может привести к проблемам совместимости. Кроме того, важно убедиться, что все развернутые проекты приложения используют одну и ту же основную версию платформы. Эта согласованность помогает избежать непредвиденных действий и ошибок.
Проверка наличия правильных заголовков кэширования
Правильные заголовки кэширования должны присутствовать в ответах на запросы ресурсов. Сюда входят ETag
заголовки Cache-Control
кэширования и другие заголовки кэширования. Конфигурация этих заголовков зависит от службы размещения или платформы сервера размещения. Они особенно важны для таких ресурсов, как Blazor скрипт (blazor.webassembly.js
) и все, что скачивает скрипт.
Неправильные заголовки кэширования HTTP также могут повлиять на работников служб. Рабочие службы используют кэширование заголовков для эффективного управления кэшируемыми ресурсами. Поэтому неправильные или отсутствующие заголовки могут нарушить функциональные возможности рабочей службы.
Использование 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 Структура проекта CoreBlazor.
ASP.NET Core