Aniket February 2016

Can service workers cache POST requests?

I tried to cache a POST request in a service worker on fetch event.

I used cache.put(event.request, response), but the returned promise was rejected with TypeError: Invalid request method POST..

When I tried to hit the same POST API, caches.match(event.request) was giving me undefined.

But when I did the same for GET methods, it worked: caches.match(event.request) for a GET request was giving me a response.

Can service workers cache POST requests? In case they can't, what approach can we use to make apps truly offline?

Answers


Marco February 2016

You can't cache POST requests using the Cache API. See https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-put-method (point 2.2).

There's a related discussion in the spec repository: https://github.com/slightlyoff/ServiceWorker/issues/693

An interesting solution is the one presented in the ServiceWorker Cookbook: https://serviceworke.rs/request-deferrer.html Basically, the solution serializes requests to IndexedDB.

Post Status

Asked in February 2016
Viewed 3,107 times
Voted 8
Answered 1 times

Search




Leave an answer