当浏览器在请求资源时,会通过http返回头中的
- content-type:指示响应内容的格式,如果这个类型浏览器能够支持阅览&&没有设置
content-disposition情况
浏览器就会直接展示该资源,比如png、jpeg、video等格式,如果浏览器不支持就会,默认触发下载 content-disposition:包含响应数据的描述信息,以及下载或者在线查看的处理方式
常见的content-type可能是如下之一:
类型 | 描述 | 典型示例 |
---|---|---|
text | 表明文件是普通文本,理论上是人类可读 | text/plain , text/html , text/css, text/javascript |
image | 表明是某种图像。不包括视频,但是动态图(比如动态 gif)也使用 image 类型 | image/gif , image/png , image/jpeg , image/bmp , image/webp , image/x-icon , image/vnd.microsoft.icon |
audio | 表明是某种音频文件 | audio/midi , audio/mpeg, audio/webm, audio/ogg, audio/wav |
video | 表明是某种视频文件 | video/webm , video/ogg |
application | 表明是某种二进制数据 | application/octet-stream , application/pkcs12 , application/vnd.mspowerpoint , application/xhtml+xml , application/xml , application/pdf |
nodejs返回图片示例:
fs.readFile(pathname.substring(1),function(err,data){
res.writeHead(200,{'Content-Type':'image/jpeg'});
res.setHeader('Content-Disposition', `attachment; filename="图片.jpeg"`);
res.end(data);
})
res.end返回的可能是某种二进制数据或则字符串,浏览器是无法识别它是什么东西
所以需要Content-Type就是告诉浏览器响应的是什么类型格式的内容
Content-Disposition设置了文件的名称信息,如果Content-Type为application/octet-stream的时候,就会拿这个filename来存储到本地电脑
application/octet-stream
在某些下载文件的场景中,服务端可能会返回文件流,并在返回头中带上Content-Type: application/octet-stream,告知浏览器这是一个字节流,浏览器处理字节流的默认方式就是下载。
下载图片
所以如果想用户访问某个图片链接的时候是下载,就可以把Content-Type设置为application/octet-stream
同时设置Content-Disposition来控制存储到本地的文件名和文件名后缀