Hardog's blog

trace forever

Group: 572218159
Email: 1273203953@qq.com
Location: hangzhou·zhejiang
GitHub: https://github.com/hardog

什么决定了浏览器是下载还是直接显示文件?

根据rfc2138说明, 最终显示还是下载文件是由浏览器端的实现决定的, 对于浏览器来说其一般遵循标准规范, 服务端可以通过头Content-Disposition来设置是直接显示还是下载文档, 该头具有以下几个可选值:

同时通过头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);