ASP.Net - Предотвращение взлома сайта на компьютерах с кэшированным CSS - PullRequest
0 голосов
/ 04 августа 2009

Когда я загружаю новую версию CSS-файлов для своего веб-сайта, возникает проблема, из-за которой клиенты, просматривающие страницы, могут иметь кэшированную версию на своих компьютерах. Они не могут видеть обновления CSS (или даже некоторые другие статические ресурсы, такие как изображения), пока не очистят свой кэш или не нажмут Ctrl + F5. Это, очевидно, не идеальное решение.

Один из способов справиться с этим - переименовывать CSS-файлы каждый раз, когда я загружаю новую сборку веб-сайта. Есть ли способ сделать это автоматически через Visual Studio? Я использую AnkhSVN для контроля версий, поэтому, если бы я мог получить скрипт, который бы делал это автоматически для выбранных файлов, это тоже сработало бы.

Я даже не знал, для чего именно Google - кто-то может указать мне правильное направление и предложить лучшие практики?

Редактировать: Да, и забыл упомянуть - мне нужно сделать это в сочетании с тегом expires на статических ресурсах. Так как я все еще в начале своего исследования, я не уверен, как это связано.

Спасибо!

Ответы [ 4 ]

8 голосов
/ 04 августа 2009

Одно простое исправление - добавить строку запроса к URL-адресу вашего файла CSS. Поэтому вместо ссылки на file.css вы ссылаетесь на file.css? A = 1. В следующий раз, когда вы измените файл CSS, вы просто измените запрос, и файл будет перезагружен.

1 голос
/ 04 августа 2009

Я всегда использую номер версии при вызове css. Например

<html>
  <title>
    <script src="myScript.js?v=1.1"/>
    <link rel="stylesheet" href="myStyle.css?v=1.1" />
  </title>
  <body>
  </body>
</html>

Увеличивая это число, вы дадите браузеру указание получить новую версию таблицы стилей / javascript. Это также удобно при использовании запросов AJAX, некоторые браузеры также имеют тенденцию кешировать их.

Вы можете адаптировать эту технику и построить некоторый код вокруг нее, чтобы автоматически увеличивать число. Например, вы можете использовать сгенерированный номер (или дату / время), который генерируется в начале сеанса пользователя. Когда пользователь возвращается позже, он получает новый сеанс, таким образом, новый номер.

Вы также можете использовать номер сборки из сборки (вы можете указать .NET автоматически увеличивать номер сборки в сборке) или сохранить номер сборки в файле web.config, который вы обновляете вручную.

Но на самом деле ключ заключается в том, чтобы использовать строку запроса за ссылкой на скрипт / css, поскольку браузеры не всегда подчиняются заголовку expire, а использование (новой) строки запроса заставит браузер получить новую версию.

0 голосов
/ 04 августа 2009

Существует отличное решение для предотвращения кэширования CSS и Javascript с помощью функции этой записи в блоге .

Он использует номер редакции SVN в строке запроса, но его можно легко изменить, чтобы использовать случайное число или строку даты / времени.

0 голосов
/ 04 августа 2009

Если вы хотите использовать заголовки HTTP, рассмотрите ETag: http://en.wikipedia.org/wiki/HTTP_ETag

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...