我需要Content-Type:application / octet-stream进行文件下载吗?

HTTP标准说:

如果在application / octet-stream内容types的响应中使用这个头部[Content-Disposition:attachment],暗示的build议是用户代理不应该显示响应,而是直接input`save response as .. 。“对话框。

我读那个

Content-Type: application/octet-stream Content-Disposition: attachment 

但是我会认为Content-Typeapplication/pdfimage/png等等

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

没有。

内容types应该是已知的,如果你知道的话。 application/octet-stream在RFC 2046中被定义为“任意二进制数据”,这里有一个明确的重叠,它适用于那些唯一的目的是保存到磁盘上的实体,威比”。 或从另一个方向来看待它; 唯一可以安全地使用application / octet-stream的方法是将其保存到文件中,并希望其他人知道它的作用。

您可以将Content-Disposition使用与其他内容types(如image/png甚至text/html来指示您想要保存而不是显示。 它曾经是一些浏览器在text/html的情况下会忽略它的情况,但是我认为这是很久以前的事了(我很快就要去睡觉了,所以我不会开始testing现在的整个浏览器;也许以后)。

RFC 2616也提到了扩展令牌的可能性,而且现在大多数浏览器都认为是inline ,意味着如果可能的话,你希望实体显示出来(也就是说,如果它是一种浏览器知道如何显示的types,否则在这个问题上别无select)。 这当然是默认的行为,但是这意味着你可以包含头filename部分,哪些浏览器会使用(也许有一些调整,所以文件扩展符合所讨论的内容types的本地系统规范,可能不会)作为build议,如果用户尝试保存。

因此:

 Content-Type: application/octet-stream Content-Disposition: attachment; filename="picture.png" 

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

 Content-Type: image/png Content-Disposition: attachment; filename="picture.png" 

意思是“这是一个PNG图像,请保存为一个文件,最好命名为picture.png”。

 Content-Type: image/png Content-Disposition: inline; filename="picture.png" 

意思是“这是一个PNG图像,除非不知道如何显示PNG图像,否则请显示它,否则,或者如果用户select保存它,我们推荐名为picture.png的文件保存为”。

在那些inline浏览器中,一些总是会使用它,而另一些则会在用户select“保存链接为”时使用它,而不是在浏览时select“保存”(或者至lessIE曾经是这样,几年前它可能已经改变了)。