Serviceworker与HTTP基本身份验证冲突?

And*_*rew 14 javascript google-chrome basic-authentication service-worker

我试图在开发的早期阶段从休闲窥探的眼睛保护网站.通过HTTPS的基本身份验证似乎是一个合理的解决方案,但服务工作者的存在似乎阻止它在Chrome中工作.如果已经安装了serviceworker,但浏览器没有对所需领域的主动授权,则会发生这种情况.

Chrome显示网络时间轴中的响应为401

网络时间线中的401

并且还显示浏览器选项卡正在接收正确的响应标头:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="My realm"
Date: Tue, 21 Jun 2016 03:09:35 GMT
Connection: close
Cache-Control: no-cache
Run Code Online (Sandbox Code Playgroud)

但它没有提示登录,它只显示401响应的内容正文.

这是Chrome错误,还是我的ServiceWorker可能有问题?

And*_*rew 7

我向负责在Chrome中实施ServiceWorker的Google工程师之一进行了演示,他确定这是一个Chromium错误.提起这里:

https://bugs.chromium.org/p/chromium/issues/detail?id=623464#


Zec*_*umo 7

这是因为一个fetch()选项不幸默认为'omit'凭证.你需要fetch(){'credentials': 'same-origin'}.观察GitHub拉取请求.

现在,如果您正在使用add()或者addAll()您将需要传递请求对象.

例:

cache.addAll(
  cacheUrls.map(url => new Request(url, {credentials: 'same-origin'}))
);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我在我的服务工作者中使用`fetch(request)`并添加了一行`request.credentials ="same-origin"`修复了这个问题. (4认同)