Chromium更新后a标签download属性下载dot文件失败,地址栏访问正常
Chromium浏览器更新后Dot文件下载失败问题
原运行正常的代码
<td valign="top"> <a href="https://chrysalis-systems.net/shared/tmp/dfmapbCNAPQ1.dot" download=""> <button type="button" title="download graph specification (graphViz:dot)"> <img src="/dflibg/sdk/images/downloadA32.png"> </button> </a> </td> <td valign="top"> <a href="https://chrysalis-systems.net/shared/tmp/dfmapbCNAPQ1.png" print="" target="_blank"> <button type="button" title="print or save graph"> <img src="/dflibg/sdk/images/printerC.png"> </button> </a> </td>
问题现象(Chromium最新版本更新后出现)
- 新窗口打开图片的链接功能正常;
- 带
download属性的dot文件下载链接触发“Failed Network Error”,此前该功能稳定运行多年; - 直接将下载链接粘贴到地址栏可正常完成下载。
已完成的排查
- 目标文件均存在,且权限、归属完全一致:
[root@amauris4 logs]# ls -lt $DOCUMENT_ROOT/shared/tmp/dfmapbCNAPQ1* -rw-r--r--. 1 apache apache 478 Mar 4 20:04 /mnt/sr/web/html/shared/tmp/dfmapbCNAPQ1.map -rw-r--r--. 1 apache apache 6792 Mar 4 20:04 /mnt/sr/_web/html/shared/tmp/dfmapbCNAPQ1.png -rw-r--r--. 1 apache apache 843 Mar 4 20:04 /mnt/sr/_web/html/shared/tmp/dfmapbCNAPQ1.dot - 排除Referrer问题(两个链接的Referrer完全一致);
- 服务器日志仅记录图片请求,未捕获到dot文件的下载请求;
- 禁用防火墙后问题未解决;
- 浏览器开发者工具控制台无任何报错信息;
- 页面属于某扩展的前台界面,可通过
<img>正常加载目标图片,仅download功能失效,问题覆盖Chrome和Edge浏览器。
解决建议
1. 为download属性指定具体文件名
Chromium最新版本可能对空download属性的处理逻辑进行了调整,尝试给属性补充明确的文件名:
<a href="https://chrysalis-systems.net/shared/tmp/dfmapbCNAPQ1.dot" download="dfmapbCNAPQ1.dot">
2. 重构a标签嵌套button的结构
这种嵌套方式在Chromium更新后可能触发了更严格的交互逻辑检查,改用JS触发下载的方式替代:
<td valign="top"> <button type="button" title="download graph specification (graphViz:dot)" onclick="initDotDownload()"> <img src="/dflibg/sdk/images/downloadA32.png"> </button> </td> <script> function initDotDownload() { const downloadUrl = 'https://chrysalis-systems.net/shared/tmp/dfmapbCNAPQ1.dot'; const link = document.createElement('a'); link.href = downloadUrl; link.download = 'dfmapbCNAPQ1.dot'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } </script>
3. 调整服务器对Dot文件的Content-Type配置
确保服务器返回的Dot文件Content-Type为浏览器无法直接解析的类型(如application/octet-stream),避免触发Chromium的安全限制。在Apache配置中添加:
# 方式1:指定Content-Type为二进制流 AddType application/octet-stream .dot # 方式2:强制触发下载头 <FilesMatch "\.dot$"> Header set Content-Disposition "attachment; filename=\"%f\"" </FilesMatch>
4. 检查扩展权限配置
由于页面属于扩展前台,Chromium更新后可能收紧了跨域下载的权限,需确认扩展manifest.json中是否包含目标资源的访问权限:
"permissions": [ "https://chrysalis-systems.net/shared/tmp/*" ]
内容的提问来源于stack exchange,提问作者Chrys G
相关产品推荐
相关产品推荐

