处理 service worker 中的获取,但允许客户端看到重定向

Handle fetch in service worker but allow client to see redirect

我有一个 url、/users/sign_out,应该注销用户并将他们重定向到我的根 url、/。我想通过我的 service worker 处理这个获取,因为我想在将用户发送回 root 之前从缓存中清除一些项目。但是,由于客户端看不到从 service worker 获取数据时发生的重定向,用户最终会出现在我的初始屏幕上,但会看到预重定向地址 /users/sign_out.

目前有什么方法可以处理提取并允许客户端看到正确的最终结果url?

看来最终会有一个 Response.redirect() 方法允许使用最终的 url 更新响应。看起来也可能有某种 finalURL 选项也可以解决这种情况。但是现在有什么可以用的吗?在 Twitter 上,Jake Archibald (@jaffathecake) 说我可以自己构建一个新的 Response - 我可以,但即使在稍微查看了规范和 MDN 文档之后,我仍然无法弄清楚如何指定正确的 url为了它。

如果确实有一种方法可以构建满足我需要的 Response 对象,有人可以告诉我它是如何工作的吗?

https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker/mock-responses 中有一个示例展示了如何创建 Response 对象并使用它来响应 fetch 事件。

在这种情况下,我们将创建一个带有正文的 200 OK 响应,但没有什么可以阻止您创建任意响应。你可能想要一个 302 Found 用于你的用例,所以你会做类似的事情:

var responseInit = {
  status: 302,
  statusText: 'Found',
  headers: {
    Location: '/' // Or whatever URL you want to redirect to.
  }
};

var redirectResponse = new Response('', responseInit);
event.respondWith(redirectResponse);

您可以在响应事件之前在 fetch 处理程序中包含清除缓存的代码,并且您显然希望首先检查 event.request.url 值以确保您只响应使用您的自定义响应请求 /users/sign_out