当我本地运行服务时莫名其妙报了cors错误
此时发现了一个神奇字段,请求表头中含有Access-Control-Request-Private-Network
Access-Control-Request-Private-Network: true
初步断定与该字段有关
资料参考:
参看stackof上的同类问题,我测试发现该问题确实目前只在chrome上出现。但是答案中加请求头的方案没有解决我的问题,我的请求依然不能正常发出
此时我找到了w3c关于该字段的描述:https://wicg.github.io/private-network-access/
本文档指定了对 Fetch 和 HTML 的修改,这些修改旨在减轻与客户端内部网络上的设备和服务器无意暴露给整个 Web 相关的风险。
根据这个描述,我猜测如果我的请求地址是以localhost开始的则不会发起预检请求,事实也确实如此。至此这个神奇的跨域消失了。变成了一个没有预检请求的普通请求。
内网请求时:
换成localhost后,预检请求消失:
目前看到产生该问题的场景都是内网之间测试时产生的
该字段用于防止用户代理无意中对运行在用户本地 Intranet 上的设备或直接在用户机器上运行的服务进行攻击。因此:
当其客户端是安全上下文并且对目标源的CORS 预检请求成功时,才允许私有网络请求。
可以解决的方案有:
可参考: