获取事件未收到请求 headers
Fetch event not receiving request headers
似乎 service worker 中的 fetch 事件没有收到请求 headers,尽管 MDN 文档中有说明:
You can retrieve a lot of information about each request by calling parameters of the Request object returned by the FetchEvent:
event.request.url
event.request.method
event.request.headers
event.request.body
从主线程获取资源的代码:
fetch(`${companyConfig.base}ticket-scanner/config`, {
headers: {
'X-Nsft-Locale' : `en`,
'X-Nsft-Id': `1`,
},
}).then((response) => {
return response.json();
}).then((data) => {...})
获取 SW 文件中的事件处理程序:
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request, {cacheName : CACHE_NAME})
.then(function(response) {
if(response) {
return response;
}
console.log(event.request.headers); //Log out headers
return fetch(event.request).then(function(response){
return response;
}).catch(function(err){
console.error(err);
})
})
)
});
为每个获取事件记录 headers 给我空 object:
Headers {}
这使我无法缓存只需要这两个 headers 的特定请求。不需要凭据。我错过了什么吗?
Headers
接口是 iterable,支持 .get()
访问器和 .has()
存在性检查。
您可以利用其中任何一个来阅读您关心的值。
const request = new Request('https://example.com', {
headers: {
'x-header-1': 'header 1 value',
'x-header-2': 'header 2 value',
}
});
for (const [header, value] of request.headers) {
console.log(`${header}: ${value} (via iterator)`);
}
console.log(`'x-header-1' is ${request.headers.get('x-header-1')}`);
console.log(`'x-header-2' ${request.headers.has('x-header-2') ? 'exists' : 'does not exist'}`);
似乎 service worker 中的 fetch 事件没有收到请求 headers,尽管 MDN 文档中有说明:
You can retrieve a lot of information about each request by calling parameters of the Request object returned by the FetchEvent:
event.request.url
event.request.method
event.request.headers
event.request.body
从主线程获取资源的代码:
fetch(`${companyConfig.base}ticket-scanner/config`, {
headers: {
'X-Nsft-Locale' : `en`,
'X-Nsft-Id': `1`,
},
}).then((response) => {
return response.json();
}).then((data) => {...})
获取 SW 文件中的事件处理程序:
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request, {cacheName : CACHE_NAME})
.then(function(response) {
if(response) {
return response;
}
console.log(event.request.headers); //Log out headers
return fetch(event.request).then(function(response){
return response;
}).catch(function(err){
console.error(err);
})
})
)
});
为每个获取事件记录 headers 给我空 object:
Headers {}
这使我无法缓存只需要这两个 headers 的特定请求。不需要凭据。我错过了什么吗?
Headers
接口是 iterable,支持 .get()
访问器和 .has()
存在性检查。
您可以利用其中任何一个来阅读您关心的值。
const request = new Request('https://example.com', {
headers: {
'x-header-1': 'header 1 value',
'x-header-2': 'header 2 value',
}
});
for (const [header, value] of request.headers) {
console.log(`${header}: ${value} (via iterator)`);
}
console.log(`'x-header-1' is ${request.headers.get('x-header-1')}`);
console.log(`'x-header-2' ${request.headers.has('x-header-2') ? 'exists' : 'does not exist'}`);