Рефераты. Протокол HTTP 1.1

модифицирован, Not Modified), 305 (используйте прокси-сервер, Use

Proxy), или ошибочному ответу (4xsx или 5xx).

Если кэш не может связаться с первоначальным сервером, то правильному

кэшу следует отвечать как описано выше, если ответ может быть правильно

обслужен из кэша; иначе необходимо возвратить ошибку или предупредить о

том, что имеется отказ связи.

Если кэш получает ответ (либо весь ответ, либо ответ с кодом состояния

304 (не модифицирован, Not Modified)), который может быть нормально передан

запрашивающему клиенту, и полученный ответ устарел, то кэшу следует

переслать его запрашивающему клиенту не добавляя нового заголовка Warning

(Предупреждение) (но не удаляя существующие заголовки Warning). Кэшу не

следует пытаться повторно проверить достоверность ответа просто потому, что

тот ответ устарел при передаче; это могло бы привести к бесконечному циклу.

Агент пользователя, который получает просроченный ответ без Warning может

показать пользователю предупреждение.

13.1.2 Предупреждения.

Всякий раз, когда кэш возвращает ответ, который не является ни

непосредственным (first-hand), ни "достаточно свежим" (в смысле условия 2

раздела 13.1.1), он должен присоединить предупреждение об этом, используя

заголовок ответа Warning. Это предупреждение позволяет клиентам

предпринимать соответствующие действия.

Предупреждения могут использоваться для других целей, как связанных с

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

ошибочных кодов состояния, отличает эти ответы от истинных отказов.

Предупреждения кэшируемы всегда, так как не ослабляют прозрачность

ответа. Это означает, что предупреждения могут быть переданы HTTP/1.0 кэшам

без опасений; такие кэши просто передадут предупреждение дальше как

заголовок объекта в ответе.

Предупреждения - это предопределенные числа от 0 до 99. Эта

спецификация определяет коды, и значения каждого определенного в настоящее

время предупреждения, позволяя клиенту или кэшу предпринимать

самостоятельные действия в некоторых (но не во всех) случаях.

Предупреждения также содержат текст предупреждения. Текст может быть

на любом соответствующем естественном языке (возможно на основании

заголовков Accept клиента), и включать опциональную индикацию используемого

набора символов.

К ответу могут быть присоединены несколько предупреждений (как

первоначальным сервером, так и кэшем), включая несколько предупреждений с

одиннаковыми кодовыми номерами. Например, сервер может добавлять одно и

тоже предупреждение как к английским текстам, так и к баскским.

Если к ответу присоединено несколько предупреждений, то может быть

практически не целесообразно или не приемлемо показать все из них

пользователю. Эта версия HTTP не определяет строгих приоритетных правил для

определения, какие из предупреждений отображать и в каком порядке, но

предлагает некоторую эвристику.

13.1.3 Механизмы управления кэшем (Cache-control Mechanisms).

Основные механизмы кэша в HTTP/1.1 (указанные сервером время

устаревания (expiration time) и указатель достоверности (validator)) -

неявные директивы кэшу. Возможны случаи, в которых сервер или клиент должен

обеспечить явные директивы HTTP кэшу. Мы используем для этой цели заголовок

Cache-Control.

Заголовок Cache-Control позволяет клиенту или серверу передавать ряд

директив как в запросах, так и в ответах. Эти директивы обычно отменяют

испоьзуемые по умолчанию кэширующие алгоритмы. В качестве общего правила:

если имеется очевидный конфликт между значениями заголовка, то должна

применяться наиболее ограничивающая интерпретация (то есть та, которая,

наилучшим образом сохранит семантическую прозрачность). Однако в некоторых

случаях директивы управления кэшем (Cache-Control) явно указывают

ослабление уровня семантической прозрачности (например, "максимально-

просроченный" ("max-stale") или "общий" ("public")).

13.1.4 Явные предупреждения агента пользователя.

Многие агенты пользователя делают возможным для пользователей отменить

основные механизмы кэширования. Например агент пользователя может позволить

пользователю указать такое поведение, при котором кэшированные объекты

(даже явно просроченные) никогда не проверяются на достоверность (are never

validated). Либо агент пользователя мог бы добавлять "Cache-Control: max-

stale=3600" к каждому запросу. Пользователю следует явно запрашивать как

непрозрачное поведение, так и поведение, которое неверно приводит к

неэффективному кэшированию.

Если пользователь отменил основные механизмы кэширования, агент

пользователя должен явно информировать пользователя всякий раз, когда

происходит отображение информации, которая может не удовлетворять

требованиям прозрачности сервера (в частности если известно, что

отображаемый объект просрочен). Так как протокол обычно позволяет агенту

пользователя определить, просрочены ответы или нет, то индикация необходима

только тогда, когда это фактически происходит. Это может отображаться не

только диалоговым окном, но и иконкой (например, изображением гниющей рыбы)

или другим визуальным индикатором.

Если пользователь отменил механизмы кэширования таким образом, что

неправильно уменьшил эффективность кэшей, агент пользователя должен

непрерывно индицировать (например, изображением горящей купюры) то, что

пользователь неосторожно потребляет ресурсы или страдает от чрезмерного

времени ожидания.

13.1.5 Исключения из правил и предупреждений.

В некоторых случаях, оператор кэша может сконфигурировать его таким

образом, чтобы он возвращал просроченные ответы, даже если они не

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

может быть необходимо по причинам доступности или эффективности, особенно,

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

когда кэш возвращает просроченный ответ, он должен пометить его (используя

заголовок Warning). Это позволяет программному обеспечению клиента

предупреждать пользователя, что возможно имеется потенциальная проблема.

Это также позволяет агенту пользователя предпринимать шаги для

получения непосредственного (first-hand) или свежего ответа. По этой

причине, кэшу не следует возвращать просроченный ответ, если клиент явно

запрашивает непосредственный или свежий, за исключением случаев, когда это

невозможно выполнить по техническим или стратегическим причинам.

13.1.6 Контролируемое клиентом поведение.

В то время как первоначальный сервер (и меньшей степени промежуточные

кэши с их вкладом в возраст ответа) является первичным источником

информации об устаревании, в некоторых случаях клиенту может быть

необходимо управлять решением кэша о том, возвращать ли кэшированный ответ,

не проверяя его достоверность. Клиенты делают это используя несколько

директив заголовка управления кэшем (Cache-Control).

Запрос клиента может определять максимальный возраст неутвержденного

ответа, который он желает получить; указывая ноль он вынуждает кэш(и)

перепроверить достоверность всех ответов. Клиент может также определить

минимальное время которое должно пройти до того, как ответ устареет. Обе

этих опции увеличивают ограничения на поведение кэшей, и, таким образом, не

могут далее ослаблять уровень семантической прозрачности кэша.

Клиент может также указать, что он примет ответы, просроченные до

некоторого определенного срока. Это ослабляет ограничения на кэши, и, таким

образом, может нарушить ограничения на семантическую прозрачность,

определенные первоначальным сервером, но может быть необходимо для

поддержки раздельного функционирования, или высокой доступности при плохой

связи.

13.2 Модель устаревания.

13.2.1 Устаревание, указанное сервером.

HTTP кэширование работает лучше всего тогда, когда кэши могут

полностью избежать запросов к первоначальному серверу. Первичный механизм

избавления от запросов - когда сервер происхождения обеспечивает явное

время устаревания в будущем, указывая, что ответ может использоваться для

удовлетворения последующих запросов. Другими словами, кэш может возвращать

свежий ответ без контакта с сервером.

Мы ожидаем, что серверы будут назначать явное время устаревания

ответов будучи убеждены, что объект, вероятно, не будет изменен

семантически значимым способом до истечения этого времени. Это обычно

сохраняет семантическую прозрачность, если время устаревания тщательно

выбрано сервером.

Механизм устаревания применяется только к ответам, полученным из кэша

а не к непосредственным ответам, немедленно посланным запрашивающему

клиенту.

Если первоначальный сервер хочет вынудить семантически прозрачный кэш

проверять достоверность каждого запроса, он может явно указать время

устаревания в прошлом. Это означает, что ответ всегда просрочен, и, таким

образом, кэш должен проверять его достоверность перед использованием для

последующих запросов.

Если первоначальный сервер хочет вынудить любой HTTP/1.1 кэш,

независимо от того, как он сконфигурирован, проверять достоверность каждого

запроса, он должен использовать директиву Cache-Control "must-revalidate".

Серверы указывают явное время устаревания, используя как заголовок

Expires, так и директиву max-age заголовка Cache-Control.

Время устаревания не может использоваться чтобы вынудить агента

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.