首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >下载文件是否需要Content-Type: application/octet-stream?

下载文件是否需要Content-Type: application/octet-stream?
EN

Stack Overflow用户
提问于 2013-12-11 09:24:19
回答 1查看 698.3K关注 0票数 506

HTTP standard说:

如果此头Content-Disposition: attachment用于应用程序/八位字节流content-type的响应中,则暗示的建议是用户代理不应显示响应,而是直接输入“将响应保存为...”对话框。

我把它理解为

代码语言:javascript
复制
Content-Type: application/octet-stream
Content-Disposition: attachment

但是我会认为Content-Type应该是application/pdfimage/png等等。

如果我想让浏览器下载文件,我应该有Content-Type: application/octet-stream吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 10:20:50

不是的。

内容类型应该是已知的任何类型,如果您知道的话。application/octet-stream在RFC2046中被定义为“任意二进制数据”,并且在这里有一个明确的重叠,它适用于其唯一目的是保存到磁盘的实体,并且从这一点上来说,它是任何"webby“之外的东西。或者从另一个角度来看它;使用application/octet-stream唯一可以安全地做的事情就是将它保存到文件中,并希望其他人知道它的用途。

您可以将Content-Disposition与其他内容类型(如image/png甚至text/html )结合使用,以表明您想要保存而不是显示。在使用text/html的情况下,一些浏览器通常会忽略它,但我认为这是很久以前的事情了(我马上就要睡觉了,所以现在不打算开始测试一大堆浏览器;也许以后再测试)。

RFC2616还提到了扩展令牌的可能性,现在大多数浏览器都认可inline,这意味着如果可能的话,你确实想要显示实体(也就是说,如果它是一种浏览器知道如何显示的类型,否则它在这个问题上别无选择)。这当然是默认行为,但这意味着您可以包括头文件的filename部分,如果用户尝试保存,浏览器可能会使用该部分(可能会进行一些调整,以便文件扩展名与相关内容类型的本地系统规范匹配,也可能不会)。

因此:

代码语言:javascript
复制
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="picture.png"

意思是“我不知道这是什么鬼东西。请将它保存为一个文件,最好命名为picture.png”。

代码语言:javascript
复制
Content-Type: image/png
Content-Disposition: attachment; filename="picture.png"

表示“这是一张PNG图片,请保存为文件,最好命名为picture.png”。

代码语言:javascript
复制
Content-Type: image/png
Content-Disposition: inline; filename="picture.png"

意思是“这是一个PNG图片。除非你不知道如何显示PNG图片,否则请显示它。否则,或者如果用户选择保存它,我们建议将其命名为picture.png”。

在那些识别inline的浏览器中,一些人会一直使用它,而另一些人会使用它,如果用户选择了“链接另存为”,但如果他们在查看时选择了“保存”(或者至少IE过去是这样的,几年前可能已经改变了)。

票数 1.2K
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20508788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档