Контроль кэша (и перенаправление) для последней версии ресурса с контролем версий - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю с веб-сервисом ReSTful, который предоставляет версионный ресурс. Меня устраивает, как это работает, но у меня есть вопрос pedanti c о «лучшем» способе обработки запросов на последнюю версию ресурса с низкой задержкой.

Старые версии ресурса можно получить с помощью версия как в

/resource/{version}

Старые версии никогда не меняются. Это постоянная ссылка . Поэтому я могу вернуть контроль кэша: неизменный согласно https://tools.ietf.org/html/rfc8246 и максимальный возраст 1 год (согласно { ссылка })

Последняя версия ресурса доступна как по идентификатору версии, так и по специальному URL-адресу «последней» (в котором не указывается версия):

/resource

Ресурс не является неизменным вечно ( кто-то может загрузить новую версию), но мы вернули конкретную версию.

Все, что мы можем сказать о последней версии, это то, что более новая версия не была загружена с некоторого времени X . Поэтому я могу установить max-age в зависимости от X и текущего времени.

GET /resource
  • Возвращает то же содержимое, что и / resource / {version} для последней версии
  • Включает ссылку на заголовок self отношение, указывающее на / resource / {version}
  • Каждый результат также имеет последнее изменение и etag заголовков.

Q Правильно ли это отношение "я"? (альтернативой будет / resource, который запрашивает агент и всегда указывает последнюю версию)? Я думаю, что «cache-control: immutable» является правильным в любом случае?

cache-control: max-age может быть основан на X для последней или может быть навсегда (1 год) для старой версии. Что является более правильным?


Для добавления грязи в воду существует также каноническое в качестве возможной альтернативы "себе".

Я ожидаю, что самый распространенный запрос будет для последней версии ресурса. Так что, если бы мы потрудились использовать cache-control: immutable в любом месте, это было бы наиболее ценно здесь.

Смежный вопрос задается запросом последней версии ресурса, которая является наиболее правильный и / или эффективный способ перенаправления на текущую неизменяемую версию?

Использование 303 «видеть другое» кажется более правильным, но будет включать в себя две поездки для каждого запроса, а не возвращать последнюю версию напрямую, как в настоящий момент. Используемый здесь подход больше похож на перезапись URL В принципе я стремлюсь к сервису с низкой задержкой.

Сервис работает, но я хотел бы сделать его педантично правильным и так хорошо продумано, насколько это возможно. Как будто был RF C для доступа ReSTful к версионным ресурсам. Я приветствую любую конструктивную критику.

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

{ ссылка }, где рекомендуется временное перенаправление.

Я искал несколько веб-сайтов для вдохновения, например:

  • Википедия использует: Cache-Control: private, s-maxage = 0, max-age = 0, must-revalidate для последней версии страницы и даже старых версий, которые имеют постоянные ссылки и могут быть неизменными

  • stackoverflow, кажется, использует "cache-control: private" для все

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

...