请求标头不是从Service Worker发送的

时间:2015-07-22 15:32:15

标签: javascript html5 jsp service-worker

我试图从服务工作者那里获取一个Web服务。此服务是使用基本Apache身份验证保护的JSP,因此我必须提供凭据以在请求标头中进行身份验证。以下请求在主窗口中工作正常:

self.addEventListener('push', function(event) {
  console.log('Received a push message', event);

  event.waitUntil(
    fetch(ONLINE_SITE_ENDPOINT, {
    method: 'GET',
    mode: 'cors',
    headers: {
        'Accept': 'application/json',
        'Authorization': 'Basic btoa(auth info)'
    }
    }).then(function(response) {
        //process response
    }).catch(function(err) {

    })
  );
});

该代码进入一个event.waitUntil()范围,进入一个从' push'事件监听器。但是,同样的确切调用失败了401(未授权)。开发人员工具中的“网络”面板显示未发送标头:

OPTIONS /latest-new.jsp HTTP/1.1
Host: {an accessible host}
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: http://localhost/service-worker.js
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

这里缺少什么东西吗?或者它不能从服务工作者那里获得?

一些额外的信息:不能使用XMLHttpRequest,因为它未被定义'关于服务工作者范围。 检索JSON之前JSP上的标头:

response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");

UPDATE:肯定会有来自服务工作者的身份验证标头,因为对非安全URL的请求不会失败。没有Apache授权的相同服务按预期工作。

2 个答案:

答案 0 :(得分:1)

您还应将接受授权

设置为允许的标头
 RewriteEngine on

 RewriteRule ^index.php?action=profile;u=/([^/]*)$ index.php?action=pm

" OPTIONS"的回应正文请求应为空(确实没有必要,但在此类响应中没有用于主体的用例)并且response.setHeader( "Access-Control-Allow-Headers", "x-requested-with, accept, authorization" ); 应为0(零)

请注意,此请求不应传递给应用程序(您可以,但不需要)

答案 1 :(得分:0)

将{“credentials”:“include”}作为fetch()调用的参数传递。

https://fetch.spec.whatwg.org/