Кэширование ответа на POST-запрос к функции Firebase

1

Я построил API-интерфейс GraphQL поверх Firebase. API использует облачную функцию, связанную с Firebase Hosting, для обработки запросов.

Моя цель - кэшировать ответ для запросов, отправленных в API GraphQL.

Средство промежуточного ПО ExpressJS настроено следующим образом:

function setCacheHeaders(req, res, next) {
    res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
    return next();
}

Если я отправлю запрос GET API, я вижу, что он нажимает на CDN:

X-Cache: HIT
X-Cache-Hits: 1
X-Served-By: cache-lhr6343-LHR

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

HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 311
Content-Type: application/json
Date: Thu, 27 Jul 2017 05:41:02 GMT
Server: nginx
Strict-Transport-Security: max-age=31556926
Vary: Accept-Encoding, Authorization, Cookie
Via: 1.1 varnish
X-Cache: MISS
X-Cache-Hits: 0
X-Served-By: cache-lcy1133-LCY
X-Timer: S1501134062.745716,VS0,VE640
cache-control: public, max-age=300, s-maxage=600
function-execution-id: xg0qjlghrtrv
x-cloud-trace-context: 02434a5f73159e24d949e74026bb8843, 02434a5f73159e24d949e74026bb8843
x-powered-by: Express

Невозможно ли кэшировать ответ на запрос POST с помощью Firebase Hosting?

Теги:
firebase
google-cloud-functions
firebase-hosting

2 ответа

2
Лучший ответ

Нет. POST не является идемпотентным, и поскольку вы не получаете доступ к правилам лака Fastly (Firebase Hosting CDN provider), вы даже не можете "взломать" его.

1

Firebase Hosting не кэширует ответы POST.

Я не эксперт GraphQL, но насколько я вижу, они позволяют использовать GET для не мутирующих запросов. Хотя вам потребуется изменить код, он позволит вам кэшировать ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню