Спецификация HTTP содержит различные заголовки, используемые для передачи клиентам информации о «кэшируемости» ресурсов. В Википедии также есть хорошее резюме здесь .
По сути, когда сервер передает клиенту некоторый ресурс, он поставляется с различными метаданными. На основе этих метаданных клиент решает, следует ли кэшировать ресурс, и если да, то как долго.
Вы можете решить свою проблему различными способами. Самый простой способ - просто установить заголовок Expires
в ответе изображения на значение 1 января 1970 г. ( Unix Epoch ). Это сообщит клиенту об истечении срока действия записи в кэше в 1970 году. Поскольку он уже прошел 1970 год, клиент никогда не будет кэшировать ресурс и всегда будет запрашивать новую копию.
У этого подхода есть свои недостатки, а именно то, что вам не нужно излишне увеличивать пропускную способность и загружать сервер, если изображение никогда не меняется. Вот где появляются заголовки ETag и LastModified.
Сервер может рассчитать короткий хеш для каждого ресурса. Допустим, хэш одного изображения работает до a423fedc
. Клиент сохранит этот хэш и при повторном запросе ресурса предоставит его на сервер, используя заголовок запроса If-None-Match
. Если сервер рассчитывает, что ETag для этого ресурса не изменился, он просто отправит обратно 304 Not Modified
, и клиент может использовать кэшированную версию. ETags объясняются далее здесь .
Но я думаю, что лучшим решением в вашем случае является заголовок Last-Modified
. Сервер отправит дату, соответствующую времени последнего изменения изображения. После перезагрузки страницы клиент отправляет обратно эту же дату как часть заголовка If-Modified-Since
. Если изображение было изменено с этой даты, сервер отправляет обновленное изображение. Если нет, он отправляет обратно код 304 Not Modified
.
Я не являюсь разработчиком ASP, поэтому я не могу рассказать вам, как установить эти заголовки в своем ответе, но если вы сможете выяснить, как, каждый веб-браузер будет правильно выполнять кэширование. Я нашел эту статью , которая, похоже, может рассказать вам, как это сделать на ASP-земле, но для начала вам достаточно просто знать о заголовках.
Для отладки рекомендуется протестировать браузер, такой как Firefox, с помощью плагина Firebug . Он может показать вам заголовки ваших запросов и ответов, чтобы вы знали, что на самом деле происходит по проводам. Если вы используете кэшированную версию или если сервер не возвращает новые данные, вы фактически увидите ответ 304 в Firebug, который может быть полезен.