但这说起来容易做起来难。在2016年11月 Reddit 上的 AMA 上,Let’s Encrypt 的代表 知道了认为私有局域网上的 HTTPS“是一个非常棘手的问题,我认为到目前为止还没有人提出一个令人满意的答案。”
给你的计算机一个主机名的常见方法包括给它一个稳定的内部 IP 地址,而不是每天或每次你的互联网网关设备的电力周期变化。您需要在您的网络上配置 DHCP 服务器,通常是在您的网关中,设置一个“预订”,将特定的私有地址(通常在 10/8或 192.168/16内)与您的开发工作站的以太网卡的 MAC 地址关联起来。为此,请阅读入门手册。
既然您的开发工作站已经有了一个稳定的 IP 地址,那么就需要进行时间/金钱的权衡。如果你愿意学习高级域名系统和 OpenSSL 的使用方法,并在所有你计划测试的设备上安装一个根证书:
我使用 ngrok 将本地 IP (实际上并非如此,因为它在 GoogleColab 上)隧道到一个公共 IP。
走到 Ngrok 控制台,我可以看到所有的隧道建成。我只为 localhost: port 创建了一个隧道,但这里有2个,一个用于 HTTP,另一个用于 HTTPS (这不是很好吗?).
如果我转到 Web 应用程序的 https 地址,我将在控制台上看到
但是如果我去 http 地址,在控制台上我得到
问: 您能与需要通过隧道连接到远程机器的 HTTP 的服务工作者一起工作吗?
显然是的!
该注册背后的代码是(了解注册失败的地方很重要) :
// Here we register the SERVICE WORKER
IndexController.prototype._registerServiceWorker = function() {
console.log("1.Starting SW function.");
if (!navigator.serviceWorker) {
console.log("2.Browser is NOT compatible with SW or something is not working.");
return; }
console.log("2.Browser is compatible with SW.");
navigator.serviceWorker.register('/sw.js').then(function() {
console.log('3.Registration worked!');
}).catch(function() {
console.log('3.Registration failed!');
});
};
为了使它更加复杂,我的 Web 应用程序使用服务工作者是在 Colab (谷歌 Colab)内运行。这个 web 应用程序在 Colab 的 Node.js 上运行。
如果您在本地主机上工作,那么对您来说应该更容易,因为在连接到本地主机时(根据理论)没有强制执行 https 要求。[ A ]和 [ B ]
这并不是说浏览器仅仅因为运行在本地主机上就适合你的应用程序。
注: 我上面的实验. 。
Firefox: 使用和不使用下面的设置。
Chrome: 没有添加地址到白名单和重新启动我得到
使用 https 网络应用程序:
IndexController.js:49 Mixed Content: The page at 'https://0a4e1e0095b0.ngrok.io/' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://0a4e1e0095b0.ngrok.io/updates?since=1602934673264&'. This request has been blocked; this endpoint must be available over WSS.
IndexController._openSocket @ IndexController.js:49
IndexController @ IndexController.js:10
(anonymous) @ index.js:16
loadScripts @ loadScripts.js:5
46.../utils/loadScripts @ index.js:15
s @ _prelude.js:1
e @ _prelude.js:1
(anonymous) @ _prelude.js:1
IndexController.js:49 Uncaught DOMException: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
at IndexController._openSocket (https://0a4e1e0095b0.ngrok.io/js/main.js:2251:12)
Navigated to http://0a4e1e0095b0.ngrok.io/
IndexController.js:17 1.Starting SW function.
IndexController.js:19 2.Browser is NOT compatible with SW or something is not working.
# Install pyngrok python package on your Google Colab Session
!pip install pyngrok
# Set up your ngrok Authtoken (requires free registration)
!ngrok authtoken YOUR_TOKEN_HERE
# Invoke ngrok from Python and start tunneling/connecting
from pyngrok import ngrok
# Open a HTTP tunnel on the default port 80 if not specified
ngrok_tunnel = ngrok.connect('8888')
# You can print it, or go to the ngrok console on https://dashboard.ngrok.com/status/tunnels
print (ngrok_tunnel.public_url)