If this header [Content-Disposition: attachment] is used in a response with the application/octet-stream content-type, the implied suggestion is that the user agent should not display the response, but directly enter a `save response as...' dialog.
我是这样读的
Content-Type: application/octet-stream
Content-Disposition: attachment
但我本以为Content-Type
会是application/pdf
, image/png
等
如果我想让浏览器下载文件,我应该有 Content-Type: application/octet-stream
吗?
最佳答案
没有。
内容类型应该是已知的任何内容,如果您知道的话。 application/octet-stream
在 RFC 2046 中被定义为“任意二进制数据”,这里有一个明确的重叠,适用于其唯一目的是保存到磁盘的实体,并且从那指向任何“webby”之外的东西。或者从另一个方向看;唯一可以安全地使用 application/octet-stream 做的事情就是将它保存到文件中,并希望其他人知道它的用途。
您可以将 Content-Disposition
与其他内容类型结合使用,例如 image/png
甚至 text/html
以表示您要保存而不是显示。过去,某些浏览器会在 text/html
的情况下忽略它,但我认为这是很久以前的事了(而且我很快就要 sleep 了,所以我'我现在不打算开始测试一大堆浏览器;也许稍后)。
RFC 2616 也提到了扩展 token 的可能性,如今大多数浏览器都将 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 曾经是这样,它可能在几年前已经改变了)。
关于http - 我需要 Content-Type : application/octet-stream for file download? 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20508788/