如果此头Content-Disposition: attachment用于应用程序/八位字节流content-type的响应中,则暗示的建议是用户代理不应显示响应,而是直接输入“将响应保存为...”对话框。
我把它理解为
Content-Type: application/octet-stream
Content-Disposition: attachment
但是我会认为Content-Type
应该是application/pdf
,image/png
等等。
如果我想让浏览器下载文件,我应该有Content-Type: application/octet-stream
吗?
发布于 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
部分,如果用户尝试保存,浏览器可能会使用该部分(可能会进行一些调整,以便文件扩展名与相关内容类型的本地系统规范匹配,也可能不会)。
因此:
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过去是这样的,几年前可能已经改变了)。
https://stackoverflow.com/questions/20508788
复制相似问题