是否可以在服务工作者中拦截和缓存WebSocket消息,就像所有示例对正常HTTP请求所做的那样?

fis*_*ch2 14 javascript websocket service-worker

我知道你可以从Service Worker本身创建WebSocket连接; 我的问题是你是否可以正常使用你的应用程序中的WebSocket并让服务工作者拦截/缓存WebSocket请求就像它可以为正常的HTTP获取请求做的那样?

以下是拦截和缓存来自Service Worker的普通HTTP请求的示例.

self.addEventListener('fetch', function(event) {
  // If a match isn't found in the cache, the response
  // will look like a connection error
  event.respondWith(caches.match(event.request));
});
Run Code Online (Sandbox Code Playgroud)

如果我的所有请求都是通过WebSockets,我将如何设置服务工作者?

Jef*_*ick 19

服务工作者无法拦截Web Socket流量.

fetch仅为受控客户端的HTTPS请求触发服务工作者的事件,并且message仅针对postMessage()来自客户端的请求触发事件.

虽然在启动Web Socket连接时存在HTTP握手,但该握手不会触发fetch处理程序,并且在建立连接后也不会发送实际流量.

  • 6年后的2022年,这仍然是真的吗? (5认同)