通过HTTP测试服务人员的选项


93

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

每当尝试在本地主机上注册服务工作者时,如何将我的本地虚拟主机URL列入白名单以测试服务工作者?Chrome表示必须启用https才能启用Service Worker。我至少在本地测试中如何才能克服此限制。

Answers:


137

通常,您需要通过HTTPS服务页面和服务工作者脚本,以便使用服务工作者。基本原理在“ 首选强大功能的安全来源”中进行了描述。

为了方便本地开发,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。不要要求真正的用户完成启用这些标志的步骤!


谢谢,杰夫会马上尝试的。绝对我只将其用于测试..暂时需要一个绝望的解决方法... !! 我不知道这是理想的做法..但是绝望的时代要求绝望的措施... !!您能给我我辛苦赚来的4分... !! 如果您认为此问题不合适,我会删除该问题,这会鼓励错误行为
Aman Satija 2015年

1
在本地主机中使用Service Worker,但是当它尝试从服务器中获取sw.js文件时,它显示了net :: ERR_INSECURE_RESPONSE,
sp1rs

1
谢谢!我已经将主体更新为阅读devtools.serviceWorkers.testing.enabled
杰夫·波斯尼克

5
对于任何难以找到上述内容的人-打开FF-开发工具-设置齿轮-高级设置-启用sw over http。然后,您可以转到URL中的about:debugging#workers或工具栏中的工具-Web开发-服务工作者。启动工人!
Sten Muchow

@StenMuchow的答案适用于我在Chrome Mac和Windows中工作
Mohamed Hussain

51

如果您想调试插入式移动设备的服务人员以进行渐进式Web应用程序的真实行为测试,则ssl chrome启动选项无济于事,您绝对不需要购买证书。

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

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

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

完成此操作后,您可以移动设备调用URL“ http:// localhost:8080 ”,并且将在实际PC /测试服务器上通过“ localhost:80”进行回答。与服务人员完美协作,就好像您的本地计算机在移动设备上运行一样。

只要您记得在移动设备上使用未特权的端口,即可用于多个端口转发和不同的目标域。看截图: 请参阅屏幕截图,了解一些已配置的端口,这些端口在手机上被调用时将调用PC

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


看起来很有希望,但对我没有用。在设置端口转发后尝试在Android 5.0.2上访问localhost时,只需说“无法访问此站点”。
杰克逊

因此,您不需要在本地主机上使用https?SW可以正常工作吗?
马查多

2
那应该是公认的答案,它工作正常
Miquel

快速简便!不要忘记在手机上启用并接受USB调试,然后通过USB将其插入PC。谢啦!
Marcos R

但是仅对于http,如果您通过https请求资源,则不会将其缓存。
传奇

24

我经常想在真实设备上进行调试和测试。我想出的一种方法涉及在本地开发期间通过Charles Proxy路由电话的网络流量。与所有特定于Chrome的解决方案不同,它可与手机上的任何浏览器一起使用。

  1. 在我的笔记本电脑上运行Charles,该笔记本电脑也可以与Service Worker一起为我的网站服务。Charles运行后,记下步骤2的IP /端口。
  2. 配置移动设备以将笔记本电脑用作代理。
    • 对于Android,只需在设置> 修改网络 > 高级设置 > 代理中点击并按住WiFi 。使用手动设置IP /端口。
    • 对于iOS,单击(i)图标> HTTP代理部分。选择“ 手动”,然后设置IP /端口。
  3. localhost现在,通过我的移动设备进行访问可以使Service Worker进行注册和测试。

4
我也面临着这个问题,非常感谢。没有代理,测试手机完全是不可能的。该帖子需要更多投票。
Phyo Arkar Lwin

1
@ chris-ruppel实际上,有一种方法可以使用Chrome开发工具内置的远程设备端口转发功能,而无需额外的代理软件。我在此线程中添加了详细的答案。
ChristopherLörken'17

“测试手机是完全不可能的。” 但这是次要的疏忽。让我们鼓掌欢迎服务人员的人们……
杰克逊

克里斯,您能否详细介绍“ 1.在笔记本电脑上运行查尔斯”?一个可以安装Charles代理。他的计算机上的服务器运行在localhost:8080。那呢 您还说“注意IP /端口”。哪里?
杰克逊

1
@ChrisRuppel我切换到ngrok.com:免费,为我的本地应用程序创建了一个公共HTTPS网站,并且像魅力一样工作!第一次运行花了一段时间,直到连接成功。如果您不在美国,我只建议切换区域(ngrok.com/docs#config-options,“ regions”参数)。
Karsten Silz

10

在我的情况下,测试pwa的最简单方法是使用ngrok。 https://ngrok.com/download登录,获取您的令牌并进行设置!

运行时,请./ngrok http {your server port}确保使用https,在上面运行此命令后,它将显示在终端中。


您也可以使用https://surge.sh,它用于承载静态网页,如果您访问以下网址https : //surge.sh/help/securing-your-custom-domain-with-ssl 将能够了解如何设置SSL证书


像魅力一样工作!谢谢您的推荐!
Karsten Silz

这也有帮助,尽管我在使用灯塔生成报告时遇到了麻烦
Cj Oyales,

3

正如Jeff在第一个响应中提到的那样,您不需要在localhost级别使用https即可测试Service Workers。只要访问不使用HTTPS的localhost域,服务工作者就可以注册并正常工作。

一旦您的应用程序在localhost上进行了测试,并且想要了解它如何与https一起使用,那么最简单的方法就是将您的应用程序上传到GitHub。您可以免费创建公共域(并使用HTTPS!)。

这里是说明:https : //pages.github.com/


1
后续问题将是针对软件建议的问题:建议使用localhost方法在移动设备上测试哪些iOS和Android Web服务器?
Damian Yerrick

我正在使用Erlang HTTP Server,但是任何服务器都可以工作。我之前使用过来自Chrome的200 HTTP服务器,但您可以从Google Marketplace进行访问。
Miguel Guardo

3

如果要在无法在本地主机上运行Web服务器的客户端设备上测试服务工作者,则常规技术如下:

  1. 给您的服务器一个主机名。
  2. 给该主机名一个证书。
  3. 使IP信任颁发此证书的CA。

但这说起来容易做起来难。在2016年11月的Reddit AMA上,一个让我们加密的代表承认私有LAN上的HTTPS“是一个非常棘手的问题,我认为到目前为止,还没有人提出令人满意的答案。”

为计算机提供主机名的常用方法包括为其提供一个稳定的内部IP地址,而不是每天或每次对Internet网关设备重新加电时都会更改的主机名。您将需要配置网络上的DHCP服务器(通常是网关中的DHCP服务器),以设置将特定的专用地址(通常在10/8或之内192.168/16)与开发工作站的以太网卡的MAC地址相关联的“保留” 。为此,请阅读网关的手册。

既然您的开发工作站具有稳定的IP地址,就可以在时间/金钱上进行权衡。如果您愿意学习高级DNS和OpenSSL用法,并在打算测试的所有设备上安装根证书:

  1. 在网络上运行内部DNS服务器。它可以在您的网关或开发工作站上。
  2. 将您的DNS服务器配置为对某些虚构TLD具有权威性,对其他TLD具有递归性。
  3. 给开发工作站的专用IP地址起一个稳定的名称。这给它一个内部名称。
  4. 配置您的DHCP服务器,以将该DNS服务器的地址提供给其他获得租约的设备。
  5. 在开发工作站上,使用OpenSSL为专用证书颁发机构和Web服务器生成密钥对。
  6. 使用OpenSSL,为CA颁发根证书,并为Web服务器的内部名称颁发证书。
  7. 使用此证书在开发工作站上的Web服务器中配置HTTPS。
  8. 在所有设备上将CA的根证书安装为受信任的根证书。
  9. 在所有设备上,访问此内部名称。

如果您无法添加根证书或控制本地DNS,例如计划使用他人拥有的设备(BYOD)或使用更多锁定用户不允许用户添加受信任的根证书的浏览器进行测试,例如主要视频游戏机,则需要一个完全限定的域名(FQDN):

  1. 从购买一个域名注册商,拥有配备了API DNS。它可以直接位于TLD内,也可以来自已将其加入公共后缀列表的动态DNS提供商之一。(由于Let's Encrypt施加了速率限制,因此非PSL动态DNS提供程序是不可接受。)
  2. 在该域的区域文件中,将一条A记录指向您的开发工作站的专用IP地址。这为您的开发工作站提供了FQDN。
  3. 使用Dehydrated(支持dns-01挑战的ACME客户端)从Let's Encrypt证书颁发机构获取此FQDN的证书。
  4. 使用此证书在开发工作站上的Web服务器中配置HTTPS。
  5. 在所有设备上,访问此名称。

1

我认为测试服务人员的最简单方法是找到免费的托管服务提供商。如今,有许多网站提供免费托管。您可以轻松地在此免费服务器上托管您的应用。

我主要使用herokunetlify。这是免费的,易于使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.