我正在构建一个配置本地网络设备的应用程序 .
可以在设备上嵌入HTTP服务器,并设置mDNS为其提供可解析的主机名,如 my-device.local
也可以 .
现在的问题是:设备没有足够的存储空间来存储复杂的Web应用程序,即使是简单的表单也在推动极限 .
此外,在设备可以尝试联系Web服务之前,需要执行某些操作来与Web服务进行通信(例如将设备注册到您的帐户) .
这就是为什么我想构建一个实现以下流程的应用程序 .
-
在
https
上的浏览器中打开https://online.service.net
Web服务并执行操作 -
重定向到
http://online.service.net
-
使用来自浏览器的背景
http
请求(其中Web应用程序仍在缓存中)通过本地网络与设备https://device.local
进行通信 .
这里的问题是,在步骤3中,整个网页需要在 http
上可用,因为CORS会阻止 https
- > http
调用 . 因此,网络应用程序将部分提供 https
,部分超过 http
,这似乎是hacky和错误,一些浏览器(如最近的Chrome版本)会抱怨 .
我能想到的其他解决方案:
-
让设备使用https,这需要
device.local
域的证书,没有权限授予我们,因此用户需要手动接受它们 . 此外,他们需要安全存储 . -
让网站和设备与第三台服务器通信 . 这是不可能的,因为该设备不一定具有互联网连接(尝试设置为's actually part of what I'm) . 即使它有,将设备与浏览器会话相关联也可能很难 .
-
而不是重定向到
http://online.service.net
,而是重定向到http://device.local
而只是对适合设备的更简单的表单感到满意 . 这没关系,已经是此流程的"fallback"模式 . 但它打破了服务的其他一些要求 . 现在无法知道设备何时在网络上实际处于活动状态,这是通过从网页上通过http轮询设备来完成的 . 这为设备未正确连接的用户带来了很多错误,因此无法找到 .