标准答案
- Content-Type 表示实际文件媒体类型,浏览器据此决定预览、解析或下载行为;服务端应基于可信内容检测或存储元数据,而不是只信用户文件名。
- Content-Disposition 控制 inline 预览还是 attachment 下载,并可提供经过正确编码和清理的文件名。
- 客户端带 Range 请求时,服务端可返回 206 Partial Content、Content-Range 和 Accept-Ranges,支持续传、视频拖动和分段读取。
- 下载接口仍必须在每个 Range 请求上执行认证和授权,不能因为拿到对象路径就绕过访问控制。
- 对大文件应使用流式输出并设置合理的缓存、ETag、内容长度和超时策略,避免一次性读入内存。
题目解析
Range 是字节范围协议,不是业务分页。服务端必须校验范围合法、避免异常大范围和多范围请求造成放大开销。
如果可上传内容被浏览器内联解析,错误的 Content-Type 或缺少下载策略可能放大 XSS、内容嗅探和跨域风险。
代码示例
客户端请求部分字节时,响应应明确说明返回的是原文件的哪个范围。
Text
HTTP/1.1 206 Partial Content
Content-Type: video/mp4
Content-Range: bytes 0-1048575/8388608
Accept-Ranges: bytes
Content-Length: 1048576常见误区
- 只设置 attachment,却没有处理文件名编码和换行等注入字符。
- 收到 Range 就直接读取,不校验范围和资源权限。
- 把整个下载对象读入应用内存再写回响应。