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


414

HTTP标准说:

如果在具有application / octet-stream内容类型的响应中使用此标头[Content-Disposition:附件],则暗示建议用户代理不应显示该响应,而应直接输入`save response.。 。”对话框。

我读为

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

不过,我本来以为Content-Type会是application/pdfimage/png等等。

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

Answers:


959

没有。

如果知道,内容类型应该是已知的任何类型。application/octet-stream在RFC 2046中被定义为“任意二进制数据”,在这里有一定的重叠之处,适用于其唯一的预期用途是保存到磁盘,并且从此以后不在任何“ webby”之外的实体。或从另一个方向来看它;安全地使用application / octet-stream唯一可以做的就是将其保存到文件中,并希望其他人知道它的用途。

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

RFC 2616还提到了扩展令牌的可能性,如今,大多数浏览器都意识到inline,如果可能的话,您确实希望显示该实体(也就是说,如果该类型浏览器知道如何显示,否则就别无选择了) 。无论如何,这当然是默认行为,但这意味着您可以包括filename浏览器将使用的标头部分(可能进行了一些调整,因此文件扩展名与所涉及内容类型的本地系统规范相匹配,也许没有)。作为用户是否尝试保存的建议。

因此:

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图片,否则请显示它。否则,或者如果用户选择保存它,我们建议将图片另存为文件的名称” picture.png”。

在那些能够识别inline某些浏览器的浏览器中,始终会使用它,而如果用户选择了“将链接另存为”,而其他浏览器则会使用它,但如果用户在查看时选择了“保存”,则不会使用它(或者至少是IE曾经这样)。可能在几年前发生了变化)。


30
这是一个很好的答案,如果事情能够那样做的话,那真的很好。但不幸的是,所有浏览器都已损坏。例如,如果这是您从表单中获得的响应,则Google Chrome将不会为您打开“文件保存”窗口,无论是否包含“ Content-Disposition:附件”,即使内容类型为“ application / octet-stream” 。然后他们打印一条消息,说您可能正受到攻击...根本没有办法让我保存文件。即使您只想保存文件,也必须配置xdg-open。我对此感到厌烦。
Divybyzero 2015年

1
@dividebyzero并不是我遇到的问题,包括Chrome。您的工作还有其他异常之处吗?
乔恩·汉娜

1
上载具有默认enctype的文件将是不正确的,并且可能是这样的结果触发了一些攻击检测,而不仅仅是使文件内容可用。
乔恩·汉娜

7
@Wilt如果客户想要保存它,那么它不会不管什么头被发送(你可以“保存”或“链接另存为”在浏览器中的任何东西),因为头是信息,而不是规则,所以attachment可能是被认为是“最好不要自己展示此内容”,而被inline认为是“如果可以的话最好自己展示此信息”。无论哪种方式,大多数浏览器都将使用文件名值作为建议的文件名,但用户始终可以覆盖该文件名。
乔恩·汉娜

1
@Tresdin谢谢。我有点不高兴,它相对于我认为更好的其他应用程序如此受欢迎,但是我想它一定已经可以回答人们的问题了。
乔恩·汉娜
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.