如何在serviceWorker中使用带提取的httpOnly会话?

问题描述 投票:1回答:1

我想创建类似于facebook通知的逻辑。当我的网站未在标签中打开时,用户将收到服务工作人员的通知。因此,这个想法是从serviceWorker中的setInterval触发restful服务

太好了。我遇到的第一个问题是XmlHttpRequest在serviceWorker中不可用。这让我成为唯一的选择:使用fetch api。我的网站使用httpOnly会话cookie进行授权。所以我试着用credentials: 'same-origin'调用fetch。

fetch('https://localhost:8000/get_extension_messages', {
        credentials: 'same-origin'
    }).then(function (response) {
        console.log(e);
    }).catch(function(e) {
        console.error(e);
    })

我添加Access-Control-Allow-Origin: https://localhost:8000/到服务器响应,但我的请求没有事件到达它,我唯一得到sw.js TypeError: Failed to fetch。据documentation说:

当遇到网络错误或服务器端的CORS配置错误时,fetch()promise将拒绝TypeError,尽管这通常意味着权限问题或类似问题 - 例如,404不构成网络错误。 enter image description here

值得一提的是,这段代码可以在网页上运行,这意味着我配置了CORS ok。由于我的cookie是httpOnly,我甚至无法从网页访问它(我可以编写一个方法返回sessionid,然后将sessionid从网页传递给serviceworker,但感觉不对)。

所以我的问题是:

  • 我该如何实现这样的用例?
  • 我可以从服务工作者执行提取并读取响应,我做错了吗?

更新:

事实证明,自签名证书导致TypeError。有趣的事实,如果我运行chrome没有任何标志,服务工作者根本不加载。在我的情况下,我开始使用--allow-insecure-localhost --user-data-dir=/tmp/lol镀铬,因此服务工作者没有任何问题,但是获取api没有。

cors service-worker fetch-api
1个回答
1
投票

不确定它是否是拼写错误,但Access-Control-Allow-Origin响应头不应包含尾部斜杠 - 它应该只是:

Access-Control-Allow-Origin: https://localhost:8000

这可能是问题所在。

© www.soinside.com 2019 - 2024. All rights reserved.