处理 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
。
我有一个 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
。