当前位置: 首页 > 知识库问答 >
问题:

serviceworker可以在url请求中添加标题吗

宗涵蓄
2023-03-14

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

我正在将标签保存在indexedDB中,我知道它在Service Worker中可用。

因此,在我的服务人员中,我希望“拦截”对< code>www.my-url.com的请求,检查indexDB以了解此人对哪些类别感兴趣,并添加一些标题,如< code >“x-my-customer-header”:“technology,physics,sports”,这样我的服务器就可以只响应这些类别的动态html。

然而,我正在努力让服务人员正确缓存我的根响应。在我的serviceworker.js中,我控制台记录了< code>onFetch处理程序的每个< code>event.request。没有与我的根url相关的请求。我现在正在我的本地主机上测试,但是我只看到对css的获取请求

这是我的onFetch:

function onFetch(event) {
  console.log('onFetch',event.request.url);
  event.request.headers["X-my-custom-header"] = "technology,sports";
  event.respondWith(
    // try to return untouched request from network first
    fetch(event.request).catch(function() {
      // if it fails, try to return request from the cache
      caches.match(event.request).then(function(response) {
        if (response) {
          return response;
        }
        // if not found in cache, return default offline content for navigate requests
        if (event.request.mode === 'navigate' ||
          (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
          return caches.match('/offline.html');
        }
      })
    })
  );
}

我使用的是rails,所以没有index.html存在被缓存,当用户点击我的url时,页面会从我的news#控制器动态提供。

我实际上使用的是宝石服务工人导轨

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

共有1个答案

闻人飞白
2023-03-14

这要归功于 Jeff Posnick 对构建新请求的回答。您需要使用一个抓取来响应,该抓取会创建一个新的请求,您可以在其中添加标头:

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)
}
 类似资料:
  • 我有一个angular应用程序,只要我按照以下步骤添加serviceWorker: https://github.com/angular/angular-cli/blob/master/docs/documentation/build.md#service-workerhttps://angular.io/guide/service-worker-getting-started …我的API请求不

  • 问题内容: 之前我使用模块在请求中添加标头。现在,我正在对该模块尝试相同的操作。 这是我正在使用的python请求模块:http : //pypi.python.org/pypi/requests 如何向和添加标头。说我必须在标题的每个请求中添加密钥。 问题答案: 从http://docs.python- requests.org/en/latest/user/quickstart/ 您只需要用标

  • 嗯,我是这个论坛的新手,如果你能在这方面帮助我,请。我搜索了一下,但找不到如何在截击请求中添加标题。我有这段代码,我想添加accept编码:gzip和api键。我会感谢你的帮助。代码如下:

  • 我在网上做了一些研究,但我没有设法得到关于这个主题的完整画面。有人能帮助解决这个问题吗? 这是我目前发现的: 可以使用jsonp进行跨域调用。在jsonp调用中不允许更改头 如果服务器允许,可以使用json进行跨域调用。 这就是我想做的: 这就是正在发生的事情: 当myJSonServer在同一个域上时,完全没有问题 当myJSonServer在另一个域上时,请求被发送,但是没有承载头 这个承载头

  • 我正在尝试在Spring Boot中使用WebClient制作API POST Request。但是我无法使用JSON正文发出我想要的请求并以JSONObject的形式接收响应。 JSON正文: 服务类别- 工作区模型- 主通话- 我需要发送一个JSON主体列表,作为主体post请求。请帮我做帖子请求提前谢谢

  • 我的问题取决于几个我认为正确的假设。 浏览器要求将标题放在CORS(跨源站资源共享)请求上。 维基百科: 要启动跨源请求,浏览器发送带有Origin HTTP标头的请求。 HTML5岩石: 首先要注意的是,有效的CORS请求总是包含Origin标头。这个Origin头是由浏览器添加的,不能由用户控制。 W3: 如果请求URL来源与原始URL来源不同,请将源来源设置为全局唯一标识符[…]。 看到ca