Мне интересно, как IIS (7 / 7.5) работает с точки зрения кода ответа 304 ((Не изменено). Например, когда изображение кэшируется на стороне клиента (то есть в веб-браузере) с установленным заголовком HTTP Last-Modified, IIS необходимо действительно проверить, действительно ли был обновлен файл физического образа? Если изображений много, эта операция ввода-вывода на диске может быть узким местом, даже если изображения кэшируются на стороне клиента. Last-Modified сохранит сроки данных, переданных по сети, но не в терминах ввода-вывода диска сервера.
Тот же вопрос может применяться к HTTP ETag. Я бы предположил, что IIS необходимо разработать «хэш содержимого», чтобы браузер мог определить, следует ли извлекать обновленную страницу или просто использовать кеш браузера.
Спасибо.
Доступ к диску действительно требуется, по крайней мере, для проверки того, что образ вообще существует (т.е. что нужно отправлять 304, а не 404).
Отрывок из w3.org, верно и для IIS.
If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.
Поскольку значение заголовка не изменилось, IIS не нужно ПОЛУЧАТЬ файл и, следовательно, не должно быть никаких операций ввода-вывода. Только если значение заголовка несовместимо, будет GET, а затем IO.
РЕДАКТИРОВАТЬ: добавление истечения срока действия контента
Если на вашем веб-сайте есть информация, чувствительная ко времени, вы можете настроить параметры, которые гарантируют, что устаревшая информация не кэшируется прокси-серверами или веб-браузерами. Вы можете настроить автоматическое истечение срока действия содержимого веб-сайта в любое время. Когда срок действия контента включен, веб-браузер сравнивает текущую дату с датой истечения срока действия, чтобы определить, отображать ли кэшированную страницу или запрашивать обновленную страницу с сервера. Серверные технологии, такие как Microsoft ASP.NET, могут использоваться для динамического изменения обслуживаемого контента. Как правило, чувствительная ко времени информация ограничивается отдельными файлами, каталогами или веб-сайтами; однако вы также можете установить срок действия контента для всех веб-сайтов на компьютере.
Трассировка Fiddler также может помочь понять концепцию.