Кажется, есть два отличных способа осуществить условные запросы, используя заголовки HTTP, оба из которых могут использоваться для кэширования, запросов диапазона, контроль за параллелизмом и т.д....:
В обоих случаях клиент посылает информацию, которую это имеет о ресурсе, который позволяет серверу определять, изменился ли ресурс, так как клиент в последний раз видел его. Сервер тогда решает, выполнить ли запрос в зависимости от условного заголовка, поставляемого клиентом.
Я не понимаю, почему два отдельных подхода доступны. Конечно, ETags заменяют метки времени, так как сервер довольно легко мог произвести ETags от меток времени.
Так, мои вопросы:
Однажды я размышлял над одним и тем же, и понял, что есть одна разница, которая очень важна: Даты можно заказывать, метки ETags - нет.
Это означает, что если какой-то ресурс был модифицирован год назад, но никогда с тех пор, и мы это знаем. Тогда мы можем правильно ответить на If-Unmodified-Since запрос на произвольные даты прошлого года и согласиться с тем, что точно... с этой даты она была неизменена.
Этаг сравним только по идентификации. Или это то же самое, или нет. Если у вас тот же самый ресурс, что и выше, и в течение года docroot был перемещён на новый диск и в файловую систему, давая всем файлам новые коды, но сохраняя даты модификаций. И кто-то основывал ETags на коде файла. Тогда мы не можем сказать, что старый ETag все еще в порядке, не имея журнала прошлое-по-прежнему в порядке ETags.
Так что я не вижу, чтобы один из них устаревал от другого. Они для разных ситуаций. Либо вы можете легко получить дату Last-Modified всех данных на странице, которую вы собираетесь обслуживать, либо вы можете легко получить ETag для того, что вы будете обслуживать.
Если у вас динамическая веб-страница с данными из множества db-поисков, может быть трудно определить, что такое Последнеизмененная дата, не сделав так, чтобы ваша база данных содержала множество дат модификации. Но вы всегда можете сделать md5 контрольную сумму страницы с результатом рендеринга.
При поддержке этих протоколов кэширования я определённо иду только на один из них, никогда на оба.
Можно использовать служебный класс MvcContrib RoiveDebugger
, чтобы получить лучшее представление о маршруте, обработанном запросом.
Все, что вам нужно сделать, это добавить ссылку на MvcContrib и добавить этот код в Global.asax
-121--2929783-RegisterRoutes (RoiveTable.Routes); RouteDebugger. RewriteRoutesForTesting (RouteTable. Маршруты);
Фактически существует два уровня наследования: наследование экземпляра и наследование класса.
Smalltalk имеет специальную схему, позволяющую передавать классы в качестве объектов. Это означает, что классы также являются объектами в своих собственных правах. Метакласс - это «просто» класс объекта класса.
Он не мешает обычному наследованию экземпляра, поэтому он не помещается в любом месте используемой диаграммы суперкласс - > класс - > подкласс
.
Есть одно довольно большое отличие: я могу использовать ETags только в том случае, если уже запросил сервер в прошлом. Временные метки, OTOH, я могу придумать, как иду.