javascript - 使用 Service Worker 将标头添加到响应中
问题描述
我正在尝试将额外的标头添加到特定的获取响应中。我已经安装了一个 service worker ,拦截了请求,但是当我尝试处理它时出现以下错误(复制并添加额外的标头)。知道如何解决吗?
Uncaught (in promise) DOMException: Failed to execute 'respondWith' on 'FetchEvent': The event handler is already finished.
self.addEventListener('fetch', function(event) {
console.log("sw request ", event.request);
if (!event.request.url.startsWith("file://")){
try{
event.respondWith(fetch(event.request));
}catch(err){
console.log(err);
}
return;
}
fetch(event.request).then(response => {
const newHeaders = new Headers(response.headers);
newHeaders.append('Cache-Control', 'max-age=300');
const responseExtra = new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
});
event.respondWith(responseExtra);
});
});
解决方案
respondWidth() 在你的 newResponse
在范围内之前被调用。这是由于像 fetch() 这样的 Promise 是如何工作的。尝试类似:
const newResponse = fetch(event.request).then(response => {
const newHeaders = new Headers(response.headers);
newHeaders.append('Cache-Control', 'max-age=300');
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
});
});
event.respondWith(newResponse);
推荐阅读
- linux - #包括
linux C++中的致命错误 - reactjs - 解析错误:找不到模块 'next/babel'
- latex - Sublime Text 3 + LatexTool 编译后无意新窗口
- python - 使用python从谷歌驱动器增量拉取
- swift - 从 Firestore 提取的数据返回重复项
- react-native - 有没有人成功使用 react-native-vector-icons 和 CodePush?
- c# - 如何在 Unity 2D 中制作软体弹跳器?
- mysql - MySQL FULLTEXT 一段时间后无法正常工作
- amazon-web-services - Lambda 调用的 AWS CloudWatch 警报
- php - 如何使用 PHP 在 ajax 函数中获取通过 URL 传递的输入值?