我试图在开发的早期阶段通过随意的窥探眼睛来保护网站。通过HTTPS的基本身份验证似乎是一个合理的解决方案,但服务工作者的存在似乎阻止它在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错误,还是我的ServiceWorker可能有问题?
答案 0 :(得分:7)
我向负责在Chrome中实施ServiceWorker的Google工程师之一进行了演示,他确定这是一个Chromium错误。提起这里:
https://bugs.chromium.org/p/chromium/issues/detail?id=623464#
答案 1 :(得分:6)
这是因为fetch()
选项默认为'omit'
凭据。您需要fetch()
与{'credentials': 'same-origin'}
。留意GitHub pull request。
目前,如果您使用add()
或addAll()
,则需要传递请求对象。
示例:强>
cache.addAll(
cacheUrls.map(url => new Request(url, {credentials: 'same-origin'}))
);