项目场景:
在公司内网环境下,使用公网域名下的系统用js访问内网的接口,会出现跨域问题。
原文:https://developer.chrome.com/blog/private-network-access-update/#what-is-private-network-access
问题描述
The request client is not a secure context and the resource is in more-private address space privat
原因分析:
公网资源(访问者) 访问 私网资源(被访问者),由于浏览器升级之后有了专用网络访问的条例
专用网络访问(以前称为 CORS-RFC1918)限制网站向专用网络上的服务器发送请求的能力。它只允许来自安全上下文的此类请求。该规范还扩展了跨域资源共享 (CORS) 协议,因此网站现在必须在被允许发送任意请求之前明确地向专用网络上的服务器请求授权。
专用网络请求是目标服务器的 IP 地址比请求发起者获取的 IP 地址更私密的请求。例如,从公共网站 ( https://example.com) 到私人网站 ( http://router.local) 的请求,或从私人网站到 localhost 的请求。
解决方案:
1.将两端升级为 HTTPS
此解决方案需要控制用户的 DNS 解析,例如 Intranet 上下文中的情况,或者如果用户从您控制的 DHCP 服务器获取其名称服务器的地址。它还要求您拥有公共域名。
通过 HTTPS 为私有网站提供服务的主要问题是公钥基础设施证书颁发机构 (PKI CA) 仅向具有公共域名的网站提供 TLS 证书。要解决此问题。
2.网络传输
此解决方案不需要控制用户的 DNS 解析。它确实需要目标服务器运行一个最小的 WebTransport 服务器(HTTP/3 服务器经过一些修改)。
3.反向嵌入
此解决方案不需要对网络进行任何管理控制,并且可以在目标服务器功能不足以运行 HTTPS 时使用。
与从公共 Web 应用程序获取私有子资源不同,可以从私有服务器提供应用程序的骨架,然后从公共服务器(例如 CDN)获取其所有子资源(例如脚本或图像)。然后,生成的 Web 应用程序可以向私有服务器发出请求,因为这些请求被认为是同源的。它甚至可以向具有私有 IP(但不是 localhost)的其他服务器发出请求,尽管从长远来看这可能会改变。
通过在私有服务器上仅托管一个骨架,您可以通过将新资源推送到公共服务器来更新 Web 应用程序,就像更新公共 Web 应用程序一样。另一方面,生成的 Web 应用程序不是安全上下文,因此它无法访问 Web 的一些更强大的功能。