gpt4 book ai didi

offline - 服务人员打额外电话

转载 作者:行者123 更新时间:2023-12-04 19:52:26 27 4
gpt4 key购买 nike

我正在尝试与服务 worker 合作以缓存并遇到经过身份验证的调用的问题。我目前正在使用 https://css-tricks.com/serviceworker-for-offline/ ( https://raw.githubusercontent.com/chriscoyier/Simple-Offline-Site/master/js/service-worker.js ) 作为模板,尽管我使用 Google 的 sw-toolbox 看到了相同的行为。

当发出依赖特定 header 参数进行身份验证的请求时,浏览器似乎发出了一个失败的初始请求,然后是一个成功的请求(见图)。有没有想过为什么会这样?还有其他可能有用的详细信息吗?

提前致谢,丹

enter image description here

最佳答案

“需要 Service Worker 回退”消息是 an internal error message这应该已经随着 Chrome 46 消失了。编辑:不过看起来它可能没有被修复,这可能会导致所描述的问题。我们正在跟进该错误。

一个更普遍的回应是,当您处理对经过身份验证的请求的响应时,您需要非常小心地处理服务 worker 缓存的方式。以下通用示例代码可能会反过来咬你,我建议你在继续之前回答以下问题:

  • 肯定想要缓存来自经过身份验证的请求的响应吗?
  • 如果是这样,您是想对所有 已验证的请求/响应使用相同的缓存方法,还是只对其中的一些特定 API 端点使用缓存方法?请记住,可能存在仅对"new"响应数据有意义的 API 调用。
  • 一旦当前用户注销/切换到不同的登录帐户,您有什么机制来处理缓存响应过期? (如果您继续使用之前缓存的响应进行响应,用户可能会觉得他们仍然以第一个帐户登录。)

如果您对一种方法感兴趣,可以通读 relevant section of the case studyGoogle I/O 2015 web app 有关,它采用了一种对我们处理的数据类型有意义的方法。有一些 additional code使用 sw-toolbox(以前称为 shed)也是相关的。但所有这些问题的答案都取决于您的具体用例,因此请在实现任何事情之前三思而后行。

编辑:根据对此答案的评论,其目的是完全避免服务 worker 与经过身份验证的请求进行交互。如果是这种情况(这肯定会简化其他问题的答案),那么您应该能够做一些简单的事情,例如:

self.addEventListener('fetch', event => {
// Only call event.respondWith() if the request doesn't include an
// Authorization header. You can swap in your own header name.
if (!event.request.headers.has('Authorization')) {
event.respondWith(
// Your standard fetch(), caches.match(), etc. logic goes here.
);
}
});

这种方法利用了这样一个事实,即如果服务 worker 的 fetch 事件处理程序不调用 event.respondWith(),则网络请求最终将继续进行如果根本没有任何服务人员参与。

关于offline - 服务人员打额外电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34035667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com