ASP.NET - недействительный кеш браузера
-
05-07-2019 - |
Вопрос
У меня есть вопрос, связанный с методами аннулирования кэша ... Я пытаюсь реализовать механизм для своего веб-сайта, который автоматически аннулирует кэш браузера (CSS, изображения ...). Я хочу иметь возможность программно аннулировать кеш браузера при каждом обновлении сайта (изменение изображений или стилей); Р>
Например: для текущей версии, среди прочего, CSS и некоторые изображения были изменены. В этой ситуации я хочу, чтобы после завершения обновления, когда пользователь выполнял запрос к веб-сайту, кэш его браузера автоматически становился недействительным, заставляя тем самым повторно загружать новые изображения и стили. Это должно быть сделано только для первого запроса клиента ... следующие должны быть извлечены из кеша (поэтому установка прагмы no-cache исключена).
Вот что я пробовал: в обработчик событий BeginRequest я добавил следующие строки: Response.Cache.SetCacheability (HttpCacheability.ServerAndPrivate); Response.Cache.SetETag (& Quot; \ & Quot; e111293b17594f1487d136ea7e9314ac \ & Quot; & Quot;); р>
это устанавливает ETag в заголовках ответа. Я полагал, что если я буду менять этот ETag в каждом выпуске и устанавливать его при каждом запросе, кеш будет аннулирован, но, похоже, это не так. Я использовал заголовки Live HTTP, чтобы увидеть результаты, и ETAG правильно настроен для ответа, но CSS и изображения все еще берутся из кэша ....
Есть идеи, как мне это сделать или можно ли вообще это сделать?
Заранее спасибо!
Решение
Я сталкивался с такими проблемами в прошлом. К сожалению, я не смог найти действительно хороший способ сделать это, поэтому мне пришлось придумать обходной путь. Я имел дело только с этой проблемой для файлов CSS, поэтому я добавил дополнительный параметр строки запроса для каждой ссылки CSS, например
<link rel="stylesheet" type="text/css"
href="default.css?buildnumber=<%= Buildnumber %>" />
Номер сборки увеличивается с каждым выпуском, поэтому браузер был вынужден искать этот новый файл. Не идеальное решение, но оно работало без помех. Р>