Security Firefox不会执行CORS请求来http://127.0.0.1 从通过https…提供的页面;

Security Firefox不会执行CORS请求来http://127.0.0.1 从通过https…提供的页面;,security,firefox,cors,mixed-content,Security,Firefox,Cors,Mixed Content,我需要使一个web应用程序与最终用户计算机上运行的程序进行通信 该web应用程序需要身份验证,并通过https提供服务 最终用户计算机上运行的程序包括一个http服务器,该服务器在127.0.0.1:12345上侦听 为了从web应用程序向程序发送数据,我使用FetchAPI执行一个PUT请求。它必须是CORS请求,因为PUT不允许用于非CORS请求。(非CORS请求允许POST请求,但我无法指定正确的内容类型…) 所有这些在Chromium(73版)上都可以正常工作,但在Firefox(60版

我需要使一个web应用程序与最终用户计算机上运行的程序进行通信

该web应用程序需要身份验证,并通过https提供服务

最终用户计算机上运行的程序包括一个http服务器,该服务器在127.0.0.1:12345上侦听

为了从web应用程序向程序发送数据,我使用FetchAPI执行一个PUT请求。它必须是CORS请求,因为PUT不允许用于非CORS请求。(非CORS请求允许POST请求,但我无法指定正确的内容类型…)

所有这些在Chromium(73版)上都可以正常工作,但在Firefox(60版和67版试用过,根本没有发送请求,甚至连CORS飞行前请求都没有)

经过一些调查,当页面通过http提供服务时,它似乎可以正常工作,但当页面通过https提供服务时,它就不能正常工作。据我所知,这似乎与说明如下的规范有关:

[…]允许用户代理终止算法而不发出请求。这可能是因为,例如:

  • [……]
  • 不允许https到http
有没有办法解决这个问题,允许Firefox通过http执行对127.0.0.1的CORS请求,即使是从https页面

据我所知,由于请求被发送到localhost(127.0.0.1),http的安全性并不比https差多少。通过http而不是https运行web应用程序是可行的,但这不是一个选项。在最终用户的计算机上安装用于本地主机的TLS证书,以便在最终用户的计算机上运行的程序中运行https服务器,也不是一个真正的选项

编辑:web应用程序尝试访问,而不是像我以前写的那样


根据文章末尾的说明,Firefox应该允许混合内容。我认为没有直接的方法可以做到这一点,即强制使用HTTPS加载页面以从HTTP服务器获取内容。混合内容绝对是不可能的,Firefox的实现有点“更安全”。不过,我可以想出一些替代方案

首先运行HTTPS服务器并不是“不可选项”,您不必创建CA并安装TLS等。您只需购买一个真正的域名myapp.com,设置一个类似loopback.myapp.com的子域,将其解析为127.0.0.1(CloudFlare允许您免费进行DNS),为该子域购买一个真正的证书,在该本地应用包中分发私钥和公钥,并运行HTTPS服务器*

另一种方法是将您的本地应用程序扩展为代理服务器,该服务器在localhost:8000上运行,并通过HTTPS与远程web应用程序进行透明通信。当然,这取决于你的网络应用程序,而不是硬编码域名


*从理论上讲,这可能会打开安全漏洞:恶意用户可以执行DNS欺骗,并使受害者的环回。myapp.com解析到攻击者的机器,并且由于每个人都有密钥,攻击者也可以对其进行解密。您可以通过硬编码RoopBe.MyAppcom到127.0.0.1在/ETC/WORDS/P>中减轻这一点,谢谢您的建议,我没有考虑设置LoalHoal.MyAppcom域名,这样我就可以在本地主机上运行一个“服务器”的证书。事实上,这使HTTPS服务器变得更加现实。然而,我仍然认为这两个选项在根本不提高安全性的情况下使事情变得更加复杂(甚至可能使事情变得更糟)…我希望有某种方法,例如内容安全策略头,允许混合内容到达特定的目的地…