9

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() スコープ、つまり「プッシュ」イベント リスナーから呼び出される関数です。ただし、まったく同じ呼び出しが 401 (Unauthorized) で失敗します。開発者ツールの [ネットワーク] パネルは、ヘッダーが送信されていないことを示しています。

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

ここに何か欠けていますか?それとも Service Worker からは達成できないのでしょうか?

追加情報: Service Worker スコープで「定義されていない」ため、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");

更新:セキュリティで保護されていない URL への要求は失敗しないため、Service Worker からの認証ヘッダーには間違いなく何かがあります。Apache 認証なしの同じサービスは、期待どおりに機能します。

4

2 に答える 2

0

{"credentials": "include"} をパラメーターとして fetch() 呼び出しに渡します。

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

于 2016-01-24T07:47:35.960 に答える