javascript - 从 HTTPS 网页访问的 localhost HTTP。为什么没有“混合内容”错误?
问题描述
我发出一个 HTTP 请求:
- 来自 HTTPS JSFiddle:
fetch('http://localhost:8090').then(...)
- 到 HTTP localhost 或 127.0.0.1
它有效。
Chrome (v89.0.4389.90) 和 Firefox (v86.0.1) 中没有“混合内容”错误。只有 Safari 会阻止该请求。但是,对 192.168.1.x 的请求会触发“混合内容”错误。
localhost 是否在 Chrome 和 Firefox 中明确列入白名单?还是浏览器供应商计划在某个时候也被“混合内容”阻止?
例如,可以依靠它来控制绑定到 localhost 并提供 HTTP API 的本地应用程序吗?
解决方案
来自MDN
浏览器可能允许加载本地交付的混合资源。这包括文件:从环回地址访问的 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.1
和localhost
都被认为是潜在可信的,因此浏览器可以决定结果。
https://w3c.github.io/webappsec-secure-contexts/#potentially-trustworthy-origin
Safari 的行为看起来像一个错误,将来可能会改变。在此处查看讨论不要将环回地址视为混合内容
推荐阅读
- java - 遍历 JSON 中收到的对象列表
- nginx - Nginx Ingress - 如果没有匹配的路由,如何设置重定向到外部站点?
- javascript - 有没有纯文本html标签之类的东西?
- scala - Scala HashMap#contains 没有任何期望
- c++ - C++ 运算符重载 << 与向量
- php - 输入值前的 Jquery 欧元符号
- javascript - 无法使用 Nativescript-drawingPad 在 iOS 上绘制签名
- ubuntu - 绑定到端口 80 的问题:无法绑定到 IPv4 或 IPv6
- c# - 每次使用 Thread.Sleep 在 c# 中的循环中等待一秒钟
- angular - 从ngrx/router-store 获取navigationTrigger