RFC: 2068
Оригинал: Hypertext Transfer Protocol - HTTP/1.1
Другие версии: RFC 2616
Категория: Предложенный стандарт
Дата публикации:
Авторы: , , , ,
Перевод: Алексей Симонов

13. Кэширование в HTTP

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

Кэширование было бы бесполезно, если бы оно значительно не улучшало производительность. Цель кэширования в HTTP/1.1 состоит в том, чтобы избавить от необходимости отправлять запросы во многих случаях, и избавлять от необходимости отправлять полные ответы во многих других случаях. Прежний сокращает количество сетевых круговых циклов, требуемых для многих операций; мы используем механизм "expiration" с этой целью (см. раздел 13.2). Последний уменьшает сетевые требования пропускной способности; мы используем механизм "проверки правильности" с этой целью (см. раздел 13.3).

Требования производительности, пригодности, и разъединенной операции требуют, чтобы мы были в состоянии ослабить цель семантической прозрачности. Протокол HTTP/1.1 позволяет серверам происхождения, кэшам, и клиентам явно уменьшать прозрачность когда необходимо. Однако, потому что непрозрачная операция может смутить пользователей неспециалиста, и может быть несовместимой с определенными приложениями — серверами (например, те для того, чтобы упорядочить товары), протокол требует, чтобы та прозрачность была ослаблена

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

Поэтому, протокол HTTP/1.1 предоставляет эти важные элементы:

  1. Возможности протокола, которые предоставляют полную семантическую прозрачность, когда это требуется всеми сторонами.
  2. Возможности протокола, которые позволяют серверу происхождения или user agent явно запрашивать и управлять непрозрачной операцией.
  3. Возможности протокола, которые позволяют кэшу прикреплять предупреждения ответам, которые не сохраняют запрошенное приближение семантической прозрачности.

Основной принцип — то, что он должен быть возможен для клиентов обнаружить любое потенциальное расслабление семантической прозрачности.

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

2007 - 2017 © Русские переводы RFC, IETF, ISOC.