什么决定了浏览器是下载还是直接显示文件?
根据rfc2138说明, 最终显示还是下载文件是由浏览器端的实现决定的, 对于浏览器来说其一般遵循标准规范, 服务端可以通过头Content-Disposition
来设置是直接显示还是下载文档, 该头具有以下几个可选值:
- inline // 告诉浏览器直接显示文档
- attachment // 告诉浏览器这是一个文件需要下载
- extension-token // NA, 用的很少
同时通过头Content-Type
来设置文档类型, 通过头Content-Description
来设置文档描述. 但是最终是直接显示还是下载取决于浏览器是否支持Content-Type
指定类型文件的解析, 例如Content-Type
设置为application/csv
格式, 此时Content-Disposition
设置为inline
即需要在浏览器直接显示也是没有用的, 浏览器(chrome 52.0.2743.116 (64-bit))也是会将该文件下载. 可以通过以下Nodejs代码来测试:
1 | 'use strict'; // Nodejs@4.3.0 let koa = require('koa'); let app = koa(); app.use(function *(next){ this.body = 'hello world!'; this.set('Content-Type', 'application/csv'); this.set('Content-Disposition', `inline`); yield next; }); app.listen(3000); |