Мы также обрабатываем кэшированные, но защищенные ресурсы. Если вы отправляете / генерируете заголовок ETAg (который рекомендуется в разделе 13.3 RFC 2616, СЛЕДУЕТ), клиент ДОЛЖЕН использовать его в условном запросе (обычно в заголовке If-None-Match - HTTP_IF_NONE_MATCH -). Если вы отправляете заголовок Last-Modified (снова вы ДОЛЖНЫ), то вам следует проверить заголовок If-Modified-Since - HTTP_IF_MODIFIED_SINCE -. Если вы отправляете оба, клиент ДОЛЖЕН отправить оба, но он ДОЛЖЕН отправить ETag. Также обратите внимание, что валидация просто определяется как проверка условных заголовков на строгое равенство с теми, которые вы отправляете Кроме того, только сильный валидатор (такой как ETag) будет использоваться для ранжированных запросов (когда запрашивается только часть ресурса).
На практике, поскольку ресурсы, которые мы защищаем, довольно статичны и допустимо время задержки в одну секунду, мы делаем следующее:
Проверьте, авторизован ли пользователь для доступа к запрошенному ресурсу
Если нет, перенаправьте их или отправьте ответ 4xx в зависимости от ситуации. Мы сгенерируем 404 ответа на запросы, которые выглядят как попытки взлома или явные попытки выполнить защитный запуск.
Сравните заголовок If-Modified-Since с заголовком Last-Modified, который мы отправим (см. Ниже) для строгого равенства
Если они совпадают, отправьте ответ 304 Not Modified и завершите обработку страницы
Создание последнего измененного заголовка с использованием времени модификации запрошенного ресурса
Поиск формата даты HTTP в RFC 2616
Отправка заголовка и содержимого ресурса вместе с соответствующим типом содержимого
Мы решили отказаться от заголовка ETag, так как он излишний для наших целей. Я полагаю, мы могли бы также использовать метку даты в качестве ETag. Если мы перейдем к настоящей системе ETag, мы, вероятно, будем хранить вычисленные хэши для ресурсов и использовать их в качестве ETag.
Если ваши ресурсы генерируются динамически, например, из содержимого базы данных, то ETag может быть лучше для ваших нужд, поскольку они представляют собой просто текст, который нужно заполнять, как вы считаете нужным.