我想创建类似于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不构成网络错误。
值得一提的是,这段代码可以在网页上运行,这意味着我配置了CORS ok。由于我的cookie是httpOnly,我甚至无法从网页访问它(我可以编写一个方法返回sessionid,然后将sessionid从网页传递给serviceworker,但感觉不对)。
所以我的问题是:
更新:
事实证明,自签名证书导致TypeError
。有趣的事实,如果我运行chrome没有任何标志,服务工作者根本不加载。在我的情况下,我开始使用--allow-insecure-localhost --user-data-dir=/tmp/lol
镀铬,因此服务工作者没有任何问题,但是获取api没有。
不确定它是否是拼写错误,但Access-Control-Allow-Origin响应头不应包含尾部斜杠 - 它应该只是:
Access-Control-Allow-Origin: https://localhost:8000
这可能是问题所在。