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

Javascript Serviceworker与HTTP基本身份验证冲突?,javascript,google-chrome,basic-authentication,service-worker,Javascript,Google Chrome,Basic Authentication,Service Worker,我正试图在开发的早期阶段保护一个站点,使其免受偶然的窥探。HTTPS上的基本身份验证似乎是一个合理的解决方案,但serviceworker的存在似乎阻止了它在Chrome中工作。如果已安装serviceworker,但浏览器没有所需领域的活动授权,则会发生这种情况 Chrome显示响应是网络时间线中的401 并显示浏览器选项卡正在接收正确的响应标题: HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm="My realm" Date:

我正试图在开发的早期阶段保护一个站点,使其免受偶然的窥探。HTTPS上的基本身份验证似乎是一个合理的解决方案,但serviceworker的存在似乎阻止了它在Chrome中工作。如果已安装serviceworker,但浏览器没有所需领域的活动授权,则会发生这种情况

Chrome显示响应是网络时间线中的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
但它不会提示登录,它只显示401响应的内容体


这是一个Chrome bug,还是可能是我的ServiceWorker的问题?

我向一位负责在Chrome中实现ServiceWorker的谷歌工程师演示了这一点,他确定这是一个Chrome bug。在此存档:


这是因为
fetch()
选项默认为
“省略”
凭据。您需要使用
{'credentials':'same origin}
获取()。注意安全

目前,如果您使用的是
add()
addAll()
,则需要传递一个请求对象

示例:

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

Chrome怎么知道在服务工作者请求中发送身份验证头?@RickViscomi服务工作者不知道,但是标签应该知道,对吗?软件在这个过程中应该是一个毫不关心的中间人,这就是我的想法。谢谢!我在我的服务人员中使用了
fetch(request)
,并添加了一行
request.credentials=“same origin”
修复了此问题。在Chrome 83中不再工作。从bug跟踪器中可以看出:我认为显示身份验证对话框的预期行为永远不会发生,因为服务人员可能会在任何时候运行,而在奇数时间弹出对话框看起来就像“魔术”。讨论: