【问题标题】:Can an HTTPS web application make calls to a non-HTTPS origin?HTTPS Web 应用程序可以调用非 HTTPS 源吗?
【发布时间】:2020-05-09 21:32:05
【问题描述】:

我有一个小型 Web 应用程序需要调用本地网络上的设备。它使用获取设备的本地 IP 地址(例如http://192.168.1.25:8060)来执行此操作。设备不通过 HTTPS 提供其流量,也不能。该网络应用程序面向公众,我想添加一个服务工作者以提供离线支持。

Service Worker 需要 HTTPS,从 HTTPS 源到非 HTTPS 源的调用存在安全风险,因此现代浏览器不允许这样做。如果不使用本地代理(这会破坏目的),有没有办法绕过这个“限制”?

https://example.com”如何呼叫http://192.168.1.25:8060

【问题讨论】:

    标签: javascript https service-worker


    【解决方案1】:

    How can I allow Mixed contents (http with https) using content-security-policy meta tag? 可能重复。浏览器不允许这样做,因为它破坏了用户信任模型。

    本地 HTTPS 代理是理想的选择。配置一个公共 DNS 条目,如 internal.example.com,具有低 TTL(如果您的内部 IP 经常更改)以指向您的内部 IP。为该子域创建一个受信任的 SSL 证书,然后使用该 SSL 证书运行您的本地 HTTPS 代理。如果您的内部服务器位于防火墙后面,请先将internal.example.com 指向公共 Web 服务器,在该公共服务器上创建证书,然后复制证书并将 DNS 更改为您的本地服务器。或者使用通配符证书*.example.com 来完全避免“临时公开”的麻烦。

    【讨论】:

    • 谢谢,但是任何拥有这些设备之一的人都可以使用此应用程序。因此,用户可能需要通过应用程序更改本地 IP 地址。我没有看到解决这个问题的任何其他方法 - 似乎使用服务人员的离线支持不是一种选择:(
    • 使用设备明确信任的自签名 CA 运行 HTTPS 怎么样?
    • 在这种情况下,这些设备完全不在我的控制范围内。有问题的设备是 Roku 电视。可以在remote.aaroncicali.com 找到 Web 应用程序。电视可以通过简单的 http 请求来控制。对于我自己的个人设备,我在路由器中保留了设备的 IP,并在应用程序中进行了硬编码。将来我可能会添加设备(或多个设备)的 IP 发现。我也想解决这个问题并使用服务人员添加离线支持。
    • 我相信Service Workers的设计让我无法解决我的具体问题,但这个答案是最能接受的。谢谢@AnthumChris
    • 只是想补充一点,HTTPS 来源可以调用http://127.0.0.1,因为它被认为是受信任的来源。如果您的目标是向同一台机器上的服务器发出请求,这可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2011-06-05
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多