服务工作者js中的Fetch()无法发送请求标头?

时间:2016-05-25 12:24:21

标签: javascript google-cloud-messaging service-worker fetch-api

我的代码相同。我正在调用fetch()但网络和服务器中的请求没有像cookie这样的请求标头。我发现了另外一篇帖子Request headers not sent from Service Worker,但它无法解决我的问题。

self.addEventListener('push', function (event) {
  event.waitUntil(
    self.registration.pushManager.getSubscription().then(function (subscription) {
      fetch('/user/get-notification', {
        mode: 'no-cors',
        method: 'post',
        headers: {
          'Authorization': 'Bearer ' + self.token,
          'Accept': 'application/json',
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(subscription)
      }).then(function (response) {
        if (response.status != 'success') {
          console.log('Looks like there was a problem. Status Code: ' + response.status);
          throw new Error();
        }

        return response.json().then(function (data) {
          var title = data.title;
          var message = data.message;
          var icon = data.image;

          return self.registration.showNotification(title, {
            body: message,
            icon: icon
          });
        });
      }).catch(function (err) {
        console.error('Unable to retrieve data', err);
      });
    })
  );
});

3 个答案:

答案 0 :(得分:3)

要包含Cookie,您需要在请求中添加credentials字段:

fetch('/user/get-notification', {
  credentials: 'include', // <-- To include cookies!
  mode: 'no-cors',
  method: 'post',
  headers: {
    'Authorization': 'Bearer ' + self.token,
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(subscription)
})

答案 1 :(得分:1)

标题是一个界面,您可以通过初始化为其提供新的选项集。像这样:

 headers: new Headers({
      'Authorization': 'Bearer ' + self.token,
      'Accept': 'application/json',
      'Content-Type': 'application/json'
 })

答案 2 :(得分:-2)

在浏览了服务工作者的官方文档之后,我注意到了

的添加
  

凭据:'include'

在fetch enable中发送请求头。感谢支持。