问题

HTTP标准说:

如果在响应中使用此标题[Content-Disposition:assect] 使用应用程序/ octetstream content-type,隐含 建议是用户代理不应显示响应,而是 直接输入“保存响应作为...”对话框。

我认为这是

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

但我想Content-Type将是application/pdf,image/png等.

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

  最佳答案

页:1

content-type应该是所知的,如果你知道的话. application/octet-stream在RFC 2046中被定义为“任意的二进制数据”,这里有一个明确的重叠,它适合于那些其唯一预期目的被保存到磁盘上的实体,从那时起,它不在任何“webby”之外.或者从另一个方向看它;唯一可以安全地与应用程序/ octe-stream联系的是将它保存到文件中,并希望其他人知道它是什么.

您可以将使用Content-Disposition与其他content-types结合起来,例如image/png或甚至text/html来表示您想要保存而不是显示.以前的情况是,在text/html的情况下,一些浏览器会忽略它,但我认为这是很久以前的事情(我很快就会睡觉,所以我现在不会开始测试一堆浏览器;也许晚些).

RFC 2616还提到扩展令牌的可能性,而且目前大多数浏览器识别inline意味着如果可能的话,您确实希望显示实体(也就是说,如果它是浏览器知道如何显示的类型,否则它在这个问题上没有选择).这当然是默认行为,但它意味着您可以包含标题的filename部分,浏览器将使用(也许有些调整,所以fileextension-match本地系统规范适用于有关content-type,也许不匹配)作为建议,如果用户尝试保存.

因此:

 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过去是这样的,它可能在几年前发生了变化).

  相同标签的其他问题

httpbrowserhttp-headersdownload