用于通过 HTTP 测试服务工作线程的选项

我想测试服务工作线程,但我有一个虚拟主机设置,我似乎无法在本地主机上启用https。

如何将本地虚拟主机 URL 列入白名单,以便在尝试在本地主机上注册服务工作线程时测试服务工作线程?Chrome表示,需要https才能启用服务工作者。我怎样才能通过这个限制,至少在本地测试。


答案 1

通常,您需要通过 HTTPS 同时提供页面和服务工作线程脚本,以便使用服务工作线程。基本原理在 Prefer Secure Origins for Powerful New Features 中进行了描述。

为了便于本地开发,HTTPS 要求有一个例外:如果您通过 或 通过 访问页面和服务工作线程脚本,则应该启用服务工作线程,而无需任何进一步的操作。http://localhost[:port]http://127.x.y.z[:port]

在最新版本的 Chrome 中,您可以通过 绕过此要求,通过 本地开发 ,如本答案中所述chrome://flags/#unsafely-treat-insecure-origin-as-secure

Firefox 通过设置提供了类似的功能devtools.serviceWorkers.testing.enabled

请注意,此功能仅用于促进否则无法进行的测试,并且在提供站点的生产版本时应始终计划使用HTTPS。不要要求真实用户完成启用这些标志的步骤!


答案 2

如果要调试插入式移动设备的服务工作线程以对渐进式 Web 应用进行实际行为测试,则 ssl chrome 启动选项没有帮助,并且您绝对不需要购买证书。

@chris-ruppel提到安装代理软件,但实际上有一种更简单的方法使用端口转发

假设您使用 Chrome 连接和调试设备:

  • Chrome开发工具“远程设备”中,打开“设置”并添加“端口转发”规则。
  • 如果您的本地主机安装程序在 localhost:80 上运行,
  • 只需添加一个规则“设备端口8080”(可以是任何未授权的端口>1024)
  • 和本地地址“localhost:80”(或mytestserver.sometestdomainwithoutssl.company:8181或其他)

完成此操作后,您可以在移动设备上调用URL“http://localhost:8080,它将由实际PC /测试服务器上的“localhost:80”应答。与服务工作者完美配合,就好像它是在移动设备上运行的本地机器一样。

也适用于多个端口转发和不同的目标域,只要您记得在移动设备上使用非特权端口即可。看截图:See screenshot for some configured ports which will call the PC when called on the mobile

此信息的来源是Google远程设备文档:https://developers.google.com/web/tools/chrome-devtools/remote-debugging/local-server(但截至2017年4月,阅读此简单答案并不是很清楚)