Использование заголовков http-запросов для принудительного кэширования ответа

#javascript #caching #http-headers #fetch

#javascript #кэширование #http-заголовки #принести

Вопрос:

Я работаю с общедоступным API, который плохо настроен, т. Е. Сервер не устанавливает заголовок Cache-Control, когда это необходимо.

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

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

Я поискал совсем немного, но, похоже, не могу найти ничего, связанного с настройкой заголовков запросов.

Обратите внимание, что я работаю на javascript и использую fetch() его для отправки запросов.

Вот состояние текущих заголовков:

 Request Headers
:authority: fantasy.premierleague.com
:method: GET
:path: /api/entry/1157414/event/3/picks/
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-GB,en-US;q=0.9,en;q=0.8
sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"
sec-ch-ua-mobile: ?0
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36

 
 Response Headers
accept-ranges: bytes
content-length: 571
content-type: text/html
date: Fri, 25 Dec 2020 16:57:32 GMT
server: nginx/1.18.0
via: 1.1 google, 1.1 varnish, 1.1 varnish
x-cache: MISS, MISS
x-cache-hits: 0, 0
x-served-by: cache-lhr7366-LHR, cache-fra19130-FRA
x-timer: S1608915452.118518,VS0,VE22
 

Комментарии:

1. Заголовок ответа не может быть обновлен на стороне клиента, насколько я знаю

2. Вы можете использовать localStorage для создания собственного кэша. Храните дату и данные в отдельных ключах и проверяйте их перед отправкой нового запроса

3. @charlietfl да, спасибо за то, что я пытаюсь сделать дальше. Хотя было бы намного чище, если бы результаты можно было просто кэшировать на уровне браузера.