Яка може бути різниця між if-modified-since та if-none-match? У мене відчуття, що if-none-match використовується для файлів, тоді як if-modified-since використовується для сторінок?
Відповіді:
Щодо відмінностей між Last-Modified/If-Modified-Since
та ETag/If-None-Match
:
І те, і інше можна використовувати як взаємозамінні. Однак залежно від типу ресурсу та того, як він генерується на сервері, на той чи інший питання ("чи було це змінено з ...?" / "Чи все-таки це відповідає цьому ETag?") Може бути простіше відповісти .
Приклади:
mtime
як Last-Modified
дати є найпростішим рішенням.ETag
буде набагато простіше. Детальніше про тему дивіться за цими посиланнями:
If-Modified-Since
порівняно з Last-Modified
тоді If-None-Match
як порівняно з ETag
. І те, Modified-Since
і ETag
інше можна використовувати для ідентифікації конкретного варіанту ресурсу.
Але порівняння If-Modified-Since
з Last-Modified
дає вам інформацію , чи знаходиться в кеші варіант старше або новіший , тоді як порівняння , If-None-Match
щоб ETag
просто дає інформацію про те , як є ідентичними чи ні. Крім того, більшість ETag
генераторів включають інформацію про специфічний для системи inode, тому переміщення файлу на інший диск також може змінити ETag
.
Значення часової позначки, яке використовується в Last-Modified / If-Modified-Since, має обмежену точність - одну секунду, і цього просто недостатньо для швидкого зміни вмісту, наприклад, наприклад, програми веб-чату, де в будь-яку секунду можна опублікувати більше одного повідомлення . ETag / If-None-Match може допомогти вирішити цю проблему.
Як зазначено в найкращих практиках Google:
Важливо вказати один із Expires або Cache-Control max-age та один з Last-Modified або ETag для всіх кешованих ресурсів. Зайвим є вказувати як Expires, так і Керування кешем: max-age, або вказувати Last-Modified та ETag.
https://developers.google.com/speed/docs/best-practices/caching
Last-Modified
з ETag
(або, з боку вживаного агента, If-Modified-Since
з If-None-Match
). Подібним чином специфікація W3 не обмежує вас. Там сказано не використовувати If-Modified-Since
з If-Match
, але я припускаю, що це тому, що набір документів, які мають оновлені дати, але такий самий вміст, як визначено ETag, повинен бути досить малим.
If-Modified-Since використовує дату, тоді як If-None-Match використовує ETag . Вони можуть використовуватися як для "сторінок" (тобто HTML), так і для інших файлів.
Якщо сервер не визначив його слабким, ETag вважається потужним валідатором і, отже, може використовуватися для задоволення запиту умовного діапазону. Однак більшість автоматично генерованих тегів ET мають труднощі у ситуаціях ферми серверів, оскільки вони часто використовують інформацію inode та / або унікальний стійкий лічильник. На практиці я виявив, що останньо змінений заголовок достатній для досить статичного вмісту, наприклад, для обслуговування захищеного статичного вмісту, оскільки час запису файлу робить досить хороший валідатор.
ETag на сьогоднішній день є найбільш гнучким. Клієнти, що відповідають вимогам, повинні надіслати ETag в умовному запиті, тоді як вони ПОВИННІ надіслати обидва, якщо такі є.
Заголовок If-Modified-Since використовується, щоб вказати час, коли браузер востаннє отримав запитуваний ресурс. Заголовок If-None-Match використовується для вказівки тегу сутності, який сервер видав із запитуваним ресурсом під час останнього отримання.
Описаними двома способами ці заголовки використовуються для підтримки кешування вмісту в браузері, і вони дозволяють серверу вказувати браузеру використовувати кешовану копію ресурсу, а не відповідати повним вмістом ресурсу, якщо це не обов `язково.