admin管理员组文章数量:1336289
It seems that fetch event inside service worker isn't receiving request headers, although it is stated in MDN documentation:
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
Code for fetching resource from main thread:
fetch(`${panyConfig.base}ticket-scanner/config`, {
headers: {
'X-Nsft-Locale' : `en`,
'X-Nsft-Id': `1`,
},
}).then((response) => {
return response.json();
}).then((data) => {...})
Fetch event handler inside SW file:
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);
})
})
)
});
Logging headers for every fetch event gives me empty object:
Headers {}
This is preventing me to cache this specific request which requires only these two headers. Credentials aren't required. Am I missing something?
It seems that fetch event inside service worker isn't receiving request headers, although it is stated in MDN documentation:
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
Code for fetching resource from main thread:
fetch(`${panyConfig.base}ticket-scanner/config`, {
headers: {
'X-Nsft-Locale' : `en`,
'X-Nsft-Id': `1`,
},
}).then((response) => {
return response.json();
}).then((data) => {...})
Fetch event handler inside SW file:
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);
})
})
)
});
Logging headers for every fetch event gives me empty object:
Headers {}
This is preventing me to cache this specific request which requires only these two headers. Credentials aren't required. Am I missing something?
Share edited Nov 16, 2017 at 18:45 Ivan Pandžić asked Nov 16, 2017 at 16:53 Ivan PandžićIvan Pandžić 5986 silver badges21 bronze badges1 Answer
Reset to default 11The Headers
interface is iterable, supports a .get()
accessor, and a .has()
existence check.
You could take advantage of any of that to read the values you care about.
const request = new Request('https://example.', {
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'}`);
本文标签: javascriptFetch event not receiving request headersStack Overflow
版权声明:本文标题:javascript - Fetch event not receiving request headers - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742406372a2468903.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论