Chromium≥94版本大文件请求返回200但响应为null问题咨询
你遇到的是Chromium 94及以上版本的默认安全策略变更导致的问题,不是请求代码的逻辑错误。
可能的原因
1. 私有网络访问(CORS-RFC1918)策略强制生效
Chromium 94开始默认开启私有网络访问安全限制,如果你的页面部署在公网域名下,请求的资源在内网域名/IP下(或反向场景),浏览器会在实际请求前自动发送OPTIONS预检请求,要求后端服务返回符合要求的响应头:
- 必须响应OPTIONS请求返回200/204状态码
- 必须返回
Access-Control-Allow-Private-Network: true响应头 - 常规CORS头(
Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers)也必须符合校验要求
如果后端未处理该预检请求,浏览器会直接拦截响应体,即使实际GET请求返回200,拿到的响应也会是null,完全匹配你遇到的表现。
2. 自定义请求头触发CORS预检未被正确处理
你的Fetch代码中添加了非标准请求头importance: low,该头不属于CORS安全列表头,跨域请求携带该头会自动触发OPTIONS预检。Chromium 94对预检的校验逻辑比旧版本更严格,之前版本存在的兼容漏洞在94版本被修复,就会出现旧版正常、新版响应被拦截的情况。
3. 响应头缺失导致大文件解析异常
如果你的大文件响应使用Transfer-Encoding: chunked返回,且未携带Content-Length头,Chromium 94对大体积chunked响应的解析逻辑存在变更,当文件体积超过256MB阈值时可能出现响应体解析失败返回null的情况。
验证方法
你可以给Chrome/Edge添加启动参数--disable-features=PrivateNetworkAccessForDownloads,或者临时添加--disable-web-security(仅用于测试,不可作为生产方案),如果启动后请求正常返回,即可确定是安全策略变更导致的问题。
修复方案
- 私有网络访问策略导致的:后端改造,正确处理OPTIONS预检请求,返回要求的
Access-Control-Allow-Private-Network: true头 - 自定义请求头导致的:要么移除请求中的
importance头,要么后端在预检响应的Access-Control-Allow-Headers中添加importance字段 - 响应头缺失导致的:后端给大文件请求响应添加正确的
Content-Length头
内容的提问来源于stack exchange,提问作者pcvnes
相关产品推荐
相关产品推荐

