Вычисление возраста

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

Хосты, которые используют HTTP, а в особенности хосты, на которых выполняются первоначальные серверы и кэши, должны использовать NTP или любой подобный протокол для синхронизации их часов с глобальным точным временем. HTTP 1.1 требует, чтобы первоначальные серверы посылали в каждом ответе заголовок Date, предоставляющий время, когда был сгенерирован ответ. HTTP 1.1 использует заголовок ответа Age для передачи информации о возрасте между кэшами. Значение заголовка Age является оценкой отправителя количества времени, прошедшего с момента, когда ответ был сгенерирован на первоначальном сервере.

В случае кэшированного ответа, который был повторно подтвержден первоначальным сервером, значение Age базируется на времени перепроверки достоверности, а не на времени первоначального ответа. В сущности, значение Age - сумма времен которые ответ находился в каждом из кэшей по пути от первоначального сервера и времен его передачи по сети. Возраст ответа может быть вычислен двумя совершенно независимыми способами 1. Сейчас минус date value, если локальные часы хорошо синхронизированы с часами первоначального сервера. Если результат отрицателен, результат заменяется нулем. 2. age value, если все кэши по пути ответа реализуют HTTP 1.1. При условии, что мы имеем два независимых способа вычисления возраста ответа при его получении, мы можем объединить их как Corrected received age max сейчас - date value, age value и пока часы у нас синхронизированы, а все кэши на пути ответа - HTTP 1.1, получаем надежный консервативный результат. Эта поправка применяется в каждом HTTP 1.1 кэше по пути следования ответа, так что если на пути встретится HTTP 1.0 кэш, то полученный возраст будет вычислен правильно, если часы этого кэша хорошо синхронизированы.

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

Игнорирование этой задержки, приводить к неправильно низким возрастам. Если запрос, который привел к возвращенному значению Age, должно быть был инициализирован до порождения значений Age, мы можем исправлять наложенные сетью задержки, делая запись времени, когда был сгенерирован запрос.

Таким образом, когда получено значение Age, оно должно быть интерпретировано относительно времени, когда был сгенерирован запрос, а не относительно времени, когда был получен ответ. Этот алгоритм приводит к консервативному поведению независимо от того, какова задержка.

Вычисляем corrected initial age corrected received age сейчас - request time Где request time - время согласно локальным часам, когда был послан запрос, вызвавший данный ответ. Резюме алгоритма вычисления возраста полученного кэшем ответа age value - это значение Age заголовок, полученный кэшем в этом ответе. date value - это значение Date первоначального сервера заголовок request time - это локальное времея, когда кэш сделал запрос, который вызвал этот кэшируемый ответ response time - это локальное время, когда кэш получил ответ now - текущее локальное время apparent age max 0, response time - date value corrected received age max apparent age, age value response delay response time - request time corrected initial age corrected received age response delay resident time now - response time current age corrected initial age resident time Когда кэш посылает ответ, он должен добавить к corrected initial age количество времени, которое ответ содержался в нем. Он должен затем передать этот общий возраст, используя заголовок Age, следующему получающему кэшу. 13.2.4