【问题标题】:Fetch event not receiving request headers获取事件未收到请求标头
【发布时间】:2017-11-16 16:53:38
【问题描述】:

Service Worker 中的 fetch 事件似乎没有收到请求标头,尽管 MDN 文档中有说明:

您可以通过调用FetchEvent返回的Request对象的参数来检索每个请求的大量信息:

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);
            })
        })
    )
});

记录每个 fetch 事件的标头都会给我一个空对象:

标题{}

这使我无法缓存仅需要这两个标头的特定请求。不需要凭据。我错过了什么吗?

【问题讨论】:

    标签: javascript service-worker service-worker-events


    【解决方案1】:

    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'}`);

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2021-10-21
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多