При создании 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 с помощью уникальной строки запроса?
eg.
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 не будет кэшироваться ни одним из браузеров?