小编典典

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

all

HTTP 标准说:

如果此标头 [Content-Disposition: attachment] 用于内容类型为 application/octet-stream
的响应中,则暗示用户代理不应显示响应,而是直接输入“将响应另存为.. .’ 对话框。

我读为

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

但我原以为Content-Type会是application/pdf,image/png等。

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


阅读 239

收藏
2022-03-11

共1个答案

小编典典

不。

如果您知道,内容类型应该是已知的任何内容。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"

意思是“我不知道这到底是什么。请将其保存为文件,最好命名为图片.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 曾经是这样的,它几年前可能已经改变)。

2022-03-11