从 HTTPS 网页访问本地主机 HTTP。为什么没有“混合内容”错误?

And*_*eev 5 javascript https google-chrome http mixed-content

我发出一个 HTTP 请求:

  • 来自 HTTPS JSFiddlefetch('http://localhost:8090').then(...)
  • 到 HTTP 本地主机或 127.0.0.1

它有效。

Chrome (v89.0.4389.90) 和 Firefox (v86.0.1) 中没有“混合内容”错误。只有 Safari 会阻止该请求。但是,对 192.168.1.x 的请求会触发“混合内容”错误。

localhost 是否在 Chrome 和 Firefox 中明确列入白名单?或者浏览器供应商是否也计划在某个时候通过“混合内容”来阻止它?

例如,可以依靠它来控制绑定到提供 HTTP API 的本地主机的本地应用程序吗?

las*_*2d2 7

来自MDN

浏览器可能允许加载本地提供的混合资源。这包括 file: URL 和从环回地址访问的内容(例如http://127.0.0.1/)。

  • Firefox 55 及更高版本允许在环回地址http://127.0.0.1/上加载混合内容(请参阅错误 903966),
  • Firefox 84 及更高版本允许在 http://localhost/ 和 http://*.localhost/ URL 上加载混合内容,因为这些内容现在映射到环回地址(请参阅错误 1220810)。
  • Chrome 还允许http://127.0.0.1/和 http://localhost/ 上的混合内容。
  • Safari 不允许任何混合内容。

127.0.0.1localhost被认为是潜在可信的,因此浏览器可以决定结果。

https://w3c.github.io/webappsec-secure-contexts/#pottially-trustworthy-origin

Safari 的行为看起来像是一个错误,并且将来可能会发生变化。请参阅此处的讨论不要将环回地址视为混合内容