Протокол HTTP 1.1
| Категория реферата: Рефераты по коммуникации и связи
| Теги реферата: мировая экономика, bestreferat
| Добавил(а) на сайт: Jakimenko.
Предыдущая страница реферата | 17 18 19 20 21 22 23 24 25 26 27
Возраст ответа может быть вычислен двумя совершенно независимыми способами:
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 Вычисление устаревания.
Чтобы решить,является ли ответ свежим или просроченным, мы должны сравнить срок его службы с возрастом. Возраст вычисляется по алгоритму, описанному в разделе 13.2.3, а этот раздел описывает, как вычислять срок службы, и определять, не устарел ли ответ. В следующем описании значения могут представляться в любой форме, подходящей для арифметических действий.
Термин "expires_value" представляет значение заголовка Expires.
Термин "max_age_value" применяется для указания значения числа секунд, представленного директивой max-age заголовка Cache-Control ответа.
Директива max-age имеет приоритет над Expires. Таким образом если в ответе присутствует max-age, то вычисления просты:
freshness_lifetime = max_age_value
В других случаях, когда в ответе присутствует Expires, вычисления таковы:
freshness_lifetime = expires_value - date_value
Ни одно из этих вычислений не уязвимо от рассинхронизирования часов, так как вся информация поступает от первоначального сервера.
Если ни Expires, ни Cache-Control: max-age не встречаются в ответе, и ответ не содержит других ограничений кэширования, то кэш может вычислить срок службы, используя эвристику. Если это значение больше 24-х часов, то кэш должен присоединять Warning 13 к любому ответу, чей возраст больше 24-х часов, если такое предупреждение еще не было добавлено.
Также если ответ имеет время последнего изменения Last-Modified, то
эвристическому значению времени устаревания следует принимать значение не
более некоторой части временного интервала, прошедшего этого времени.
Типичная значение этой части могло бы быть 10%.
Вычислить, истек ли ответ, совершенно просто: response_is_fresh = (freshness_lifetime > current_age)
13.2.5 Устранение противоречий в значениях устаревания.
В том случае, когда значения устаревания назначены оптимистично, возможен случай, когда два кэша содержат различные значения свежести одного и того же ресурса.
Если клиент, выполняющий поиск, получает не непосредственный ответ на запрос, который уже был свежим в его собственном кэше, а заголовок Date в существующем вхождении кэша более свежий, чем Date нового ответа, то клиент может игнорировать ответ. Если он игнорирует ответ, то он может повторить запрос с директивой "Cache-Control: max-age=0", вызывая проверку первоначальным сервером.
Если кэш имеет два свежих ответа на запрос одного и того же представления, но с различным указателями достоверности, то он должен использовать тот из них, у которого заголовок Date более свеж. Такая ситуация может вознкнуть либо когда кэш объединяет ответы других кэшей, либо когда клиент запросил перезагрузку или перепроверку достоверности очевидно свежего вхождения кэша.
13.2.6 Устранение противоречий между несколькими ответами.
В силу того, что клиент может получать ответы многими путями, возможна ситуация, когда кеш получает один поток ответов через один набор кэшей, а другой поток ответов через другой набор кэшей. В таком случае клиент может получать ответы в порядке, отличном от того, в котором их посылал первоначальный сервер. Мы хотели бы, чтобы клиент использовал наиболее свежий ответ, даже если ранее полученные ответы все еще очевидно свежи.
Ни метка объекта ни значение устаревания не можгут быть использованы
для упорядочения ответов, так как, возможно, более поздний ответ
преднамеренно несет более раннее время устаревания. Однако, спецификация
HTTP/1.1 требует передачи заголовков Date в каждом ответе, и значения Date
упорядочивают степень детализации до одной секунды.
Когда клиент пытается повторно проверить достоверность вхождения кэша, и ответ, который он получает, содержит заголовок Date, который старше, чем у существующего вхождения, то клиенту следует повторить запрос без изменений, но включить
Cache-Control: max-age=0
чтобы вынудить промежуточные кэши проверить достоверность их копий непосредственно первоначальным сервером, или
Cache-Control: no-cache
чтобы вынудить промежуточные кэши получить новую копию с первоначального сервера.
Если значения Date равны, то клиент может использовать любой ответ
(или может, если он чрезвычайно предусмотрительный, запросить новый ответ).
Серверы не должны полагаться на то, что клиенты способны выбрать между
ответами, порожденными в течение одной секунды, если их времена устаревания
накладываются.
13.3 Модель проверки достоверности (validation model).
Если кэш имеет просроченное вхождение, которое он хотел бы использовать в качестве ответа на запрос клиента, он сначала должен свериться с первоначальным сервером (или с промежуточным кэшем, обладающим свежим ответом) чтобы узнать, является ли вхождение кэша все еще пригодным для использования. Мы называем это "проверкой достоверности" вхождения кэша. Так как мы не хотим оплачивать излишнюю передачу полного ответа, когда кэшируемый нас устраивает, и так как мы не хотим оплачивать лишнюю передачу ответа туда и обратно, когда кэшируемое вхождение нас не устраивает, протокол HTTP/1.1 поддерживает использование условных методов.
Ключевые возможности протокола для обеспечения условных методов - те, что имеют отношение к "указателям достоверности (validators) кэша". Когда первоначальный сервер генерирует полный ответ, он присоединяет к нему некоторый указатель достоверности (validator), который сохраняется во вхождении кэша. Когда клиент (агент пользователя или кэш прокси-сервера) делает условный запрос на ресурс, для которого он имеет вхождение кэша, он включает связанный указатель достоверности (validator) в запрос.
Затем сервер проверяет полученный указатель достоверности (validator) на соответствие текущему указателю достоверности (validator) объекта, и, если он соответствует, то сервер посылает ответ со специальным кодом состояния (обычно 304 (не модифицирован), не содержащий тела объекта. В противном случае, он возвращает полный ответ (включая тело объекта). Таким образом, мы избегаем передачи полного ответа в случае соответствия указателя достоверности (validator), и избегаем дополнительной передачи туда-обратно в случае несоответствия.
В HTTP/1.1, условный запрос выглядит точно также, как нормальный запрос того же ресурса, за исключением того, что он содержит специальный заголовок (который включает указатель достоверности), который неявно превращает метод (обычно, GET) в условный.
Протокол содержит как положительные, так и отрицательные условия на указатели достоверности. То есть возможно запросить как метод, который будет выполнен только в случае соответствия указателя достоверности, так и метод, который будет выполнен только в случае несоответствия указателя достоверности.
Ответ, который не содержит указателя достоверности, все же может кэшироваться и обслуживаться из кэша пока не устареет, если это явно не запрещено директивой Cache-Control. Однако, кэш не может производить условный поиск, если он не имеет указателя достоверности объекта, что означает, что ответ не будет регенерирован после того, как устареет.
Библиографический список
|Номер |Название |Авторы |Дата |Статус |Примечания |
|RFC | | | | | |
|822 |STANDARD FOR THE |David H. |August 13,|Proposed |Obsoletes: |
| |FORMAT OF ARPA |Crocker |1982 |Standard |RFC #733 |
| |INTERNET TEXT | | | | |
| |MESSAGES | | | | |
|850 |Standard for |RFC team |June 1983 |Information| |
| |Interchange of USENET| | |al | |
| |Messages | | | | |
|1036 |Standard for |M. |December |Proposed |Obsoletes: |
| |Interchange of USENET|Horton, |1987 |Standard |RFC-850 |
| |Messages |R. Adams | | | |
|1123 |Requirements for |Robert |October |Proposed | |
| |Internet Hosts -- |Braden |1989 |Standard | |
| |Application and | | | | |
| |Support | | | | |
|1738 |Uniform Resource |Tim |December |Proposed | |
| |Locators (URL) |Berners-L|1994 |Standard | |
| | |ee, | | | |
| | |Larry | | | |
| | |Masinter,| | | |
| | | | | | |
| | |Mark | | | |
| | |McCahill | | | |
|1766 |Tags for the |H. |March 1995|Standards | |
| |Identification of |Alvestran| |Track | |
| |Languages |d | | | |
|1808 |Relative Uniform |Roy T. |June 1995 |Proposed | |
| |Resource Locators |Fielding | |Standard | |
|1867 |Form-based File |E. Nebel,|November |Experimenta| |
| |Upload in HTML |L. |1995 |l | |
| | |Masinter | | | |
|1900 |Renumbering Needs |Brian E. |February |Information| |
| |Work |Carpenter|1996 |al | |
| | |, Yakov | | | |
| | |Rekhter | | | |
|1945 |Hypertext Transfer |T. |May 1996 |Information| |
| |Protocol -- HTTP/1.0 |Berners-L| |al | |
| | |ee, R. | | | |
| | |Fielding | | | |
| | |, H. | | | |
| | |Frystyk | | | |
|1950 |ZLIB Compressed Data |P. |May 1996 |Information| |
| |Format Specification |Deutsch, | |al | |
| |version 3.3 |J-L. | | | |
| | |Gailly | | | |
|1952 |GZIP file format |P. |May 1996 |Information| |
| |specification version|Deutsch | |al | |
| |4.3 | | | | |
|2048 |Multipurpose Internet|N. Freed,|November |Best |Obsoletes: |
| |Mail Extensions |J. |1996 |Current |1521, 1522, |
| |(MIME) Part Four: |Klensin, | |Practice |1590 |
| |Registration |J. Postel| | | |
| |Procedures | | | | |
|2068 |Hypertext Transfer |R. |January |Standards | |
| |Protocol -- HTTP/1.1 |Fielding,|1997 |Track | |
| | | | | | |
| | |J. | | | |
| | |Gettys, | | | |
| | |J. Mogul,| | | |
| | |H. | | | |
| | |Frystyk, | | | |
| | |T. | | | |
| | |Berners-L| | | |
| | |ee | | | |
|2069 |An Extension to HTTP |J. |January |Standards | |
| |: Digest Access |Franks, |1997 |Track | |
| |Authentication |P. | | | |
| | |Hallam-Ba| | | |
| | |ker, J. | | | |
| | |Hostetler| | | |
| | |, P. | | | |
| | |Leach, A.| | | |
| | |Luotonen,| | | |
| | |E. Sink, | | | |
| | |L. | | | |
| | |Stewart | | | |
-----------------------
[pic]
[pic]
[pic]
Скачали данный реферат: Jablochkov, Fomin, Volgin, Vasilij, Ясаков, Кайпанов, Иванов.
Последние просмотренные рефераты на тему: курсовые, казахстан реферат, конспекты уроков в 1 классе, отчет о прохождении практики.
Категории:
Предыдущая страница реферата | 17 18 19 20 21 22 23 24 25 26 27