2014-11-20 9 views
5

Я знаю, что этот вопрос задают несколько раз. Но все же я не совсем понимаю эту концепцию. После прочтения много блогов и ответы на SO что я получил естьВ чем разница между заголовком Etag и Expires?

Expiry headers are used when you don’t even want client (and proxies/caches) to make a request to 
the server. In ETAG, the client will check with the server for the update, but in expiry 
headers, the client will know, when to expire the file and check for an update, till then it 
(browsers and proxies/caches) won’t bother server for checking the update. 

Так в основном это сказать, если мы будем использовать заголовок Expires/макс возраста, он даже не будет проверять сервер для получения обновленного файла. Поэтому я решил проверить его локально.

Итак, я создал простой файл html, включая 2 файла js и 1 файл изображения. В IIS я установил заголовок Expires на 2 дня для папки с изображениями. Итак, по моему пониманию, после получения файла изображения с сервера один раз, для следующего запроса он не должен отправлять запрос на сервер, чтобы проверить, что файл изображения изменен или нет.

Но каждый раз, когда я обновляю страницу, я вижу запрос, отправленный на сервер, и сервер возвращает статус 304 not modified. Но согласно спецификациям/блогам, которые я читал, он не должен отправлять запрос на сервер.

Кто-то, пожалуйста, объясните.

enter image description here

ответ

3

За то, что вы описали

  • Очевидно, что ETag работает как ожидается, реагируя с 304 not modified для запроса с If-None-Match поля и ETag значение.

    так что теперь браузер загрузит изображение из кеша, вместо того, чтобы получать новое изображение с стоимости и времени обслуживания сервера.

  • Кажется, что кэширование в вашем браузере отключён .То Почему новый запрос был отправлен до истечения кэш-либо запрос не был бы послан в первую очередь.

    Вот замечательный article, который объясняет, как найти кэширование отключено в браузере программно

    Вот еще один замечательный article, что объясняет кэширования и Etag в глубине.

Примечание:

Вообще говоря Если вы используете несколько серверов с балансировкой нагрузки для размещения вашего сайта тогда простых конфигураций Etag вероятно будет стоить больше пропускной способности при наличии Etag в заголовке и не имеет никакой цели, которая проверяет, действительно ли кеш браузера действителен. (Его всегда будет сказано недействительным)

0

Важная часть - это то, что вы сказали: Я обновляю страницу. В этом случае браузер пытается предоставить вам свежий контент, поэтому у него нет другого выбора, кроме как связаться с сервером и проверить все ресурсы. (Существует расширение управления кешем immutable, которое предотвращает это поведение, но не широко используется и не используется).

Если вы хотите увидеть поведение своего браузера, который уважает кеши без перезагрузки, вам нужно использовать «стандартную запись страницы». Либо следуйте ссылке на страницу или используйте другую вкладку, и напишите url страницы в строке url и нажмите enter.

Кэши соблюдают срок действия, поэтому, если документ не является устаревшим, то возвращается из кеша. Если истек, что ETag используется для проверки ресурса (и после проверки возможно, что ресурс все еще не изменен - ​​ответ 304)