如何将服务工作者与受htaccess保护的目录一起使用?

时间:2018-04-03 00:55:44

标签: javascript apache .htaccess service-worker http-status-code-401

我正在尝试一些基本的服务工作者。服务工作者本身将在服务工作者第一次注册时正常工作。我总是得到的问题是,一旦该人将来重新访问该网站(例如第二天),并尝试访问受.htaccess / .htpasswd个受保护的目录。他们没有像往常那样得到对话框,而是直接转向401错误。

这就是我在HTML中的脚本标记中注册服务工作者的方式。

if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/sw.js').then(function(registration) {
      // Registration was successful
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, function(err) {
      // registration failed :(
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}

我在sw.js本身尝试过几种不同的方法,每次遇到同样的错误。这是一个来自谷歌空降师的例子,我相信......

self.addEventListener('install', e => {
  const timeStamp = Date.now();
  e.waitUntil(
    caches.open('somename').then(cache => {
      return cache.addAll([
        `/`,
        `/index.html`,
        `/css/tour-2.css`
      ])
          .then(() => self.skipWaiting());
    })
  );
});

self.addEventListener('activate', event => {
      event.waitUntil(self.clients.claim());
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request, {ignoreSearch: true}).then(response => {
      return response || fetch(event.request);
    })
  );
});

是否有人知道是否可以将服务工作者用于具有.htaccess受保护目录的网站?

感谢。

1 个答案:

答案 0 :(得分:1)

一种治愈方法是:

self.addEventListener('fetch', event => {
    // Exclude admin panel.
    if (0 === event.request.url.indexOf("https://www.my-site.com/my-protected-area")) {
        return;
    }

应该有帮助。

Source: TIV.NET