serviceworker是否可以向url请求添加标头

时间:2018-03-27 03:20:12

标签: ruby-on-rails service-worker

我有一个网站,我不想让人们创建帐户。这是一个新闻Feed,每篇新闻文章都有分类。我希望允许人们标记他们感兴趣的类别,以便下次他们访问该网站时,它只会显示已标记类别的新闻。

我将标签保存在indexedDB中,据我所知,这可以在服务工作者中使用。

因此,在我的服务人员中,我想要"拦截"请求def fun1(): mysum = 0 def fun2(mysum, arg): mysum += arg fun2(mysum, 1) fun2(mysum, 2) fun2(mysum, 3) print mysum ,检查indexDB此人感兴趣的类别,并添加一些标题,如with open('merged.md', 'w') as out_f: for filename in glob.glob('*.md'): with open(filename) as f: out_f.write(f.read()) ,以便我的服务器只能响应这些类别的动态html。

但是,我努力让服务工作者正确缓存我的根响应。在我的serviceworker.js中,我为www.my-url.com处理程序的每个'x-my-customer-header': 'technology,physics,sports'控制台。没有与我的根网址相关的请求。我现在正在我的本地主机上进行测试,但我只看到了对css&的抓取请求。 js文件。

这是我的onFetch:

event.request

我使用rails,因此没有index.html存在要缓存,当用户点击我的网址时,该页面是从我的新闻#controller控制器动态提供的。

我实际上正在使用gem serviceworker-rails

我做错了什么?如何让我的服务工作者保存根文件并拦截添加标头的请求?这甚至可能吗?

1 个答案:

答案 0 :(得分:3)

此处归功于杰夫波斯尼克his answer on constructing a new Request。您需要使用提取来响应,该提取会创建一个可以添加标题的新请求:

self.addEventListener('fetch', event => {
  event.respondWith(customHeaderRequestFetch(event))
})

function customHeaderRequestFetch(event) {
  // decide for yourself which values you provide to mode and credentials
  const newRequest = new Request(event.request, {
    mode: 'cors',
    credentials: 'omit',
    headers: {
      'x-my-custom-header': 'The Most Amazing Header Ever'
    }
  })
  return fetch(newRequest)
}