HTTP之content-disposition

Content-DispositionHTTP 响应头 的一个字段,用来告诉浏览器:"这个响应体(body)是应该直接展示在页面上,还是当成文件下载?如果下载,文件名应该叫什么?"


🔍 一句话解释

Content-Disposition服务器给浏览器的"下载提示" ,告诉浏览器 "别打开,直接保存,文件名是 xxx"


📌 常见格式

1. 在线打开(默认值)
http 复制代码
Content-Disposition: inline

浏览器会 直接打开 文件(比如图片、PDF 直接在标签页显示)。

2. 下载文件
http 复制代码
Content-Disposition: attachment

浏览器会 弹出下载框,不打开文件。

3. 下载并指定文件名
http 复制代码
Content-Disposition: attachment; filename="员工模板.xlsx"

浏览器会 下载文件,并默认保存为"员工模板.xlsx"


⚠️ 中文文件名兼容性

中文文件名 必须编码,否则不同浏览器会乱码。

✅ 正确写法(UTF-8 编码)
http 复制代码
Content-Disposition: attachment; filename*=UTF-8''%E5%91%98%E5%B7%A5%E6%A8%A1%E6%9D%BF.xlsx
  • filename*=UTF-8'' 是 RFC 5987 标准,支持中文
  • %E5%91%98... 是"员工模板.xlsx"的 URL 编码。

🧪 前端如何解析(对应你代码)

js 复制代码
const contentDisposition = res.headers['content-disposition']
// 例子:attachment; filename*=UTF-8''%E5%91%98%E5%B7%A5%E6%A8%A1%E6%9D%BF.xlsx

const filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/)
if (filenameMatch && filenameMatch[1]) {
  const filename = decodeURIComponent(filenameMatch[1].replace(/['"]/g, ''))
  // 结果:员工模板.xlsx
}

✅ 总结一句话

场景 Content-Disposition 值示例 浏览器行为
在线打开 inline 直接打开文件
下载文件 attachment 弹出下载框
下载+文件名 attachment; filename*=UTF-8''%E5%91%98%E5%B7%A5.xlsx 下载并保存为中文名
相关推荐
xixixi777771 小时前
“C2隐藏”——命令与控制服务器的隐藏技术
网络·学习·安全·代理·隐藏·合法服务·c2隐藏
在多学一点1 小时前
iptables的源地址转换和iptables的目标地址转换
网络
gadiaola1 小时前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试
罗汉松(山水白河)2 小时前
关于串口与UDP通讯的实验
单片机·嵌入式硬件·网络协议·udp·tcp·串口、
Xの哲學2 小时前
Linux 分区表深度技术剖析
linux·网络·算法·架构·边缘计算
fei_sun3 小时前
【复习】计网每日一题1124---UDP首部检验和计算、检验和特殊含义
网络·网络协议·udp
2***57423 小时前
前端WebSocket案例
网络·websocket·网络协议
百***81273 小时前
《计算机网络》(B)复习
网络·计算机网络
木易 士心4 小时前
WebSocket 与 MQTT 在即时通讯中的深度对比与架构选型指南
websocket·网络协议·架构
赖small强4 小时前
【Linux 网络基础】网络通信中的组播与广播:基础概念、原理、抓包与应用
linux·网络·broadcast·组播·广播·multicast