Какой смысл If-Unmodified-Since/If-Modified-Since? Разве они не заменены ETags?

Кажется, есть два отличных способа осуществить условные запросы, используя заголовки HTTP, оба из которых могут использоваться для кэширования, запросов диапазона, контроль за параллелизмом и т.д....:

  1. If-Unmodified-Since и, «Если Изменено С тех пор», куда клиент посылает метку времени ресурса.
  2. Если - Измененный и, «Если Ни одно Измененное», куда клиент посылает представление ETag ресурса.

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

Я не понимаю, почему два отдельных подхода доступны. Конечно, ETags заменяют метки времени, так как сервер довольно легко мог произвести ETags от меток времени.

Так, мои вопросы:

  • В которых сценариях Вы могли бы одобрить If-Unmodified-Since/If-Modified-Since по ETags?
  • В которых сценариях Вам, возможно, понадобились бы оба?
12
задан rewbs 24 January 2010 в 11:18
поделиться

3 ответа

Однажды я размышлял над одним и тем же, и понял, что есть одна разница, которая очень важна: Даты можно заказывать, метки ETags - нет.

Это означает, что если какой-то ресурс был модифицирован год назад, но никогда с тех пор, и мы это знаем. Тогда мы можем правильно ответить на If-Unmodified-Since запрос на произвольные даты прошлого года и согласиться с тем, что точно... с этой даты она была неизменена.

Этаг сравним только по идентификации. Или это то же самое, или нет. Если у вас тот же самый ресурс, что и выше, и в течение года docroot был перемещён на новый диск и в файловую систему, давая всем файлам новые коды, но сохраняя даты модификаций. И кто-то основывал ETags на коде файла. Тогда мы не можем сказать, что старый ETag все еще в порядке, не имея журнала прошлое-по-прежнему в порядке ETags.

Так что я не вижу, чтобы один из них устаревал от другого. Они для разных ситуаций. Либо вы можете легко получить дату Last-Modified всех данных на странице, которую вы собираетесь обслуживать, либо вы можете легко получить ETag для того, что вы будете обслуживать.

Если у вас динамическая веб-страница с данными из множества db-поисков, может быть трудно определить, что такое Последнеизмененная дата, не сделав так, чтобы ваша база данных содержала множество дат модификации. Но вы всегда можете сделать md5 контрольную сумму страницы с результатом рендеринга.

При поддержке этих протоколов кэширования я определённо иду только на один из них, никогда на оба.

12
ответ дан 2 December 2019 в 20:17
поделиться

Простая причина: обратная совместимость.

1
ответ дан 2 December 2019 в 20:17
поделиться

Можно использовать служебный класс MvcContrib RoiveDebugger , чтобы получить лучшее представление о маршруте, обработанном запросом.

Все, что вам нужно сделать, это добавить ссылку на MvcContrib и добавить этот код в Global.asax

 RegisterRoutes (RoiveTable.Routes);
RouteDebugger. RewriteRoutesForTesting (RouteTable. Маршруты);
-121--2929783-

Фактически существует два уровня наследования: наследование экземпляра и наследование класса.

Smalltalk имеет специальную схему, позволяющую передавать классы в качестве объектов. Это означает, что классы также являются объектами в своих собственных правах. Метакласс - это «просто» класс объекта класса.

Он не мешает обычному наследованию экземпляра, поэтому он не помещается в любом месте используемой диаграммы суперкласс - > класс - > подкласс .

-121--3879764-

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

3
ответ дан 2 December 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: