Service worker:如果没有网络,什么return,静态资源的缓存未命中(缓存策略)

Service worker: What to return if no network, and cache miss for a static resource (caching strategy)

我有多种缓存策略,例如

A GET 页面:尝试网络,然后缓存,否则使用默认页面。

但是,如果它是静态资源,如 .css.js 文件。一个 return 如果无法从网络获得响应应该怎么办?如果4s内没有获取到我就知道系统挂了,长时间的超时获取是不理想的。

目前我return一个404,但从语义上讲这不太正确,不是没有找到资源,而是请求从未到达服务器。但对我来说似乎是最适用的 4XX 系列(客户端失败)代码。

    get404Response(statusText = "") {
        const init = { status: 404, statusText: statusText };
        return new Response("", init);
    }

或者我不想引发提取错误,因为在 chrome 开发工具中,在服务工作者的应用程序下,它会跟踪您的软件引发了多少错误,我正在尝试跟踪合法错误。

这是一个判断电话,我认为您不会得到明确的答案。

我的第一选择是使用 Response.error(),尽管您提到您对在 DevTools 中记录噪音持谨慎态度。综合创建 Response.error() 最接近匹配您让请求自行超时时看到的行为。

如果您更喜欢 return“有效”(non-error) 响应但对使用 404 状态代码不满意,则使用 503 可能是另一种选择?不过,我不确定您是否会看到任何值得担心的功能差异。

504 似乎很合适: wikipedia:

504 Gateway Timeout The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.

我在这里遇到了问题: https://developer.mozilla.org/en-US/docs/Web/API/Request/cache#value

如果使用 only-if-cached 请求缓存响应,但没有缓存响应,则浏览器 returns 504。