Chrome/Chromium低磁盘空间下XHR请求重复执行失败问题排查
Chrome/Chromium磁盘空间相关XHR下载失败问题排查与解决方案
问题描述
Chrome/Chromium浏览器存在与剩余磁盘空间相关的下载异常:运行在专用PC上的媒体播放器应用,剩余磁盘空间虽显示不足(如示例中剩余1.5GB),但远大于待下载文件大小(如15MB),却出现下载失败问题。
复现代码
function _startDownloadBackground() { var httpRequest = new XMLHttpRequest(); httpRequest.open('GET', 'images/background.mp4', true); httpRequest.responseType = 'blob'; httpRequest.onload = () => { console.log('success'); }; httpRequest.onerror = () => { console.log('fail'); }; httpRequest.send(); }
复现步骤与现象(本地运行无远程服务器影响)
- 首次打开Chrome执行函数 → 成功
- 再次执行函数 → 抛出
ERR_FAILED 200错误 - 刷新浏览器后执行 →
ERR_FAILED 200错误 - 开启DevTools的「Disable Cache」后执行 →
ERR_FAILED 200错误 - 强制刷新后执行 →
ERR_FAILED错误 - 关闭Chrome重新打开后执行 → 成功
- 在DevTools中右键重放失败的XHR请求 → 成功
注:该问题仅出现在Chrome/Chromium浏览器,Edge、Firefox无此异常。
已尝试的无效方案
以下Chrome启动参数未解决问题:
--disk-cache-size=104857600--aggressive-cache-discard--enable-aggressive-domstorage-flushing
关键日志记录
通过chrome://net-export/导出的日志中发现两条关键记录:
HTTP_CACHE_DOOM_ENTRY [dt=0] --> net_error = -2 (ERR_FAILED)HTTP_TRANSACTION_READ_BODY [dt=1](无URL_REQUEST_JOB_FILTERED_BYTES_READ请求),下一行显示Cancelled
解决方案
1. 重定向Chrome缓存目录到充足空间磁盘
修改Chrome启动参数,指定缓存目录到剩余空间充足的分区,强制绕过系统盘的空间限制:
--disk-cache-dir="D:\ChromeCache"
2. 手动清理Chrome缓存与临时文件
通过chrome://settings/clearBrowserData清理以下内容:
- 缓存的图片和文件
- Cookie及其他网站数据
- 下载历史记录
即使剩余空间看似足够,碎片化缓存文件可能触发Chrome的磁盘空间检测机制,清理后可恢复正常下载。
3. 为XHR请求添加禁用缓存头
在请求中添加Cache-Control: no-store头,强制Chrome直接读取本地资源而非操作缓存:
function _startDownloadBackground() { var httpRequest = new XMLHttpRequest(); httpRequest.open('GET', 'images/background.mp4', true); httpRequest.responseType = 'blob'; // 禁用缓存,直接获取资源 httpRequest.setRequestHeader('Cache-Control', 'no-store'); httpRequest.onload = () => { console.log('success'); }; httpRequest.onerror = () => { console.log('fail'); }; httpRequest.send(); }
4. 检查磁盘实际可用空间
系统显示的剩余空间可能未包含隐藏系统文件、虚拟内存或磁盘碎片占用:
- 使用Windows磁盘清理工具释放系统盘空间
- 检查磁盘是否存在坏道导致空间计算异常
5. 更新Chrome到最新稳定版
旧版本Chrome的磁盘缓存管理逻辑可能存在Bug,更新到最新版本可修复已知的空间检测问题。
内容的提问来源于stack exchange,提问作者AdrianHolmes
相关产品推荐
相关产品推荐

