4

IIS がホストする Web サイト内で、サイトの静的コンテンツの一部をキャッシュする Service Worker を使用しようとしています。このサイトは、Windows 認証を使用する内部アプリケーションです。それほど手間をかけずに Service Worker を登録して実行することができましたが、キャッシュを開いてファイルをキャッシュに追加し始めるとすぐに、認証エラーで約束が失敗します。返された HTTP 結果は 401 Unauthorized です。これは、ブラウザーとサーバーが承認をネゴシエートできるようになるまでの最初のいくつかの要求に対する通常の応答です。

説明に役立つコードをすぐに投稿します。

編集

var staticCacheName = 'app-static-v1';
console.log("I AM ALIVE");
this.addEventListener('install', function (event) {
    console.log("AND I INSTALLED!!!!");
    var urlsToCache = [
        //...many js files to cache
        '/scripts/numeral.min.js?version=2.2.0',
        '/scripts/require.js',
        '/scripts/text.js?version=2.2.0',
        '/scripts/toastr.min.js?version=2.2.0',
    ];


    event.waitUntil(
        caches.open(staticCacheName).then(function (cache) {
            cache.addAll(urlsToCache);
        }).catch(function (error) {
            console.log(error);
        })
    );
});
4

1 に答える 1

18

コードがないため、これは単なる推測ですが、次のようなことをしている場合:

caches.open('my-cache').then(cache => {
  return cache.add('page1.html'); // Or caches.addAll(['page1.html, page2.html']);
});

/に文字列を渡すときに発生する暗黙的Request なオブジェクト作成(セクション 6.4.4.4.1 を参照) を利用しています。作成されたオブジェクトは、既定の資格情報モードを使用します。cache.add()cache.addAll()Request'omit'

代わりにできることはRequest、好みの資格情報モードを含むオブジェクトを明示的に構築することです。この場合、次のようになります'same-origin'

caches.open('my-cache').then(cache => {
  return cache.add(new Request('page1.html', {credentials: 'same-origin'}));
});

に配列を渡す URL がたくさんある場合は、それらを対応する の配列に渡すcache.addAll()ことができます。.map()Request

var urls = ['page1.html', 'page2.html'];
caches.open('my-cache').then(cache => {
  return cache.addAll(urls.map(url => new Request(url, {credentials: 'same-origin'})));
});
于 2016-07-13T19:14:27.083 に答える