是否可以使用工作箱缓存 POST 请求的响应?我的应用程序使用 POST 请求而不是 GET 来获取列表数据,因为用户凭据与请求一起发送。
您可以使用以下语法缓存 POST 请求:
workbox.routing.registerRoute(
<url>,
<workbox strategy>,
'POST'
);
Run Code Online (Sandbox Code Playgroud)
让我澄清 S. Esteves 的回答。
浏览器缓存存储无法将 POST 请求作为键持久化(请参阅此处的规范)。
如果innerRequest 的url 方案不是“http”和“https”之一,或者innerRequest 的方法不是
GET,则返回一个被TypeError 拒绝的promise。
Workbox 允许您通过将“POST”作为第三个参数传递给 registerRoute 函数来拦截POST 请求(就像 service worker 对 GET 请求的 fetch 事件所做的那样),然后您可以将一些自定义逻辑放入处理程序中(但即使手动您仍然无法将响应保存到缓存存储,因为它不受支持)。
因此,直接使用执行缓存响应的 Workbox 策略最终会出错(请参阅此处的示例)。
所以这里的选项是:
从这里引用:
HTTP缓存只适用于幂等请求,这很有意义;只有幂等和无效请求在多次运行时会产生相同的结果。在 HTTP 世界中,这个事实意味着 GET 请求可以被缓存但 POST 请求不能
但是,有时无法使用 GET 发送幂等请求,因为该请求超出了流行的 Internet 软件施加的限制。
workbox.routing.registerRoute(
/api/, // Change to match your endpoint URL.
async ({event, url}) => {
// See https://developers.google.com/web/tools/workbox/guides/route-requests#handling_a_route_with_a_custom_callback
// Do something here. What it is up to you.
// Eventually, return a Response object, or else your request will fail.
return response;
},
'POST' // Opt-in to matching POST requests. Only GET is matched by default.
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3256 次 |
| 最近记录: |