Должен ли я добавить Cache-Control: no-cache к конечным точкам GET моего REST API? - PullRequest
0 голосов
/ 17 октября 2019

При создании REST API работать с POST / PUT просто. Они не идемпотентны и поэтому по умолчанию НЕ кэшируются браузерами.

Однако при создании конечной точки GET все становится сложнее. У меня есть страх, что браузеры (или определенный) по умолчанию будут пытаться кэшировать запросы GET всякий раз, когда они могут, и я получу устаревшие данные.

Реален ли этот страх агрессивного кэширования?

Давайте рассмотрим пример конечной точки GET /articles/123/comments.

Несмотря на то, что эта конечная точка является конечной точкой GET, каждый запрос может возвращать различное содержимое, так как комментарии к статье принимаются.

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

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

content-length: 2518
content-type: application/json
date: Thu, 17 Oct 2019 07:51:59 GMT
status: 200

Как лучше всего избегать устаревших данных для запросов GET?

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

  • очистка кэша моих вызовов GET с помощью уникальной строки запроса?

    напр. GET /articles/123/comments?nonce=12312310980923409

  • добавление Cache-Control: no-cache (будет ли это всегда соблюдаться?)

  • добавление ETag: xyz_HASH_OF_MY_LIST_OF_COMMENTS?

  • добавление Cache-Control: max-age=0 (для отключения кэширования)

  • добавление Cache-Control: max-age=60 (для уменьшения максимальной продолжительности кэширования)

  • только не беспокойтесь и предположите, что без заголовков типа ETag, Last-Modified запрос GET не будет кэшироваться ни одним из браузеров?

...