6

我有一个 url,/users/sign_out应该注销用户并将他们重定向到我的根 url /,。我想通过我的服务工作者处理这个获取,因为我想在将用户发送回 root 之前从缓存中清除一些项目。但是,由于客户端看不到在从服务人员获取时发生的重定向,因此用户在我的初始屏幕上结束了,但看到了预重定向地址/users/sign_out

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

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

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

4

1 回答 1

4

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使用自定义响应响应请求。

于 2015-07-09T20:11:41.580 回答