是否可以使用带有标头"Content-Disposition: attachment"的源作为 src 值<img>?



有一个带有端点http://endpoint/image_id的第三方API,它返回一个具有以下标题的响应:

content-disposition:attachment; filename=image.png
content-length:27774
content-type:image/png

根据MDN文件,

在常规HTTP响应中,Content-Disposition响应标头为指示内容是否期望在浏览器中以inline的形式显示,即作为网页或网页的一部分,或作为附件,可在本地下载并保存。

然而,我不得不这样使用它:

<img src="http://endpoint/image_id">

在Chrome中,它对我来说还可以,我已经显示了图像。但我对此有疑问。可以吗?

是否正常并不是那么简单
这是因为它意味着两种不同的标准。HTML规范和HTTP协议规范。所以它有一些灰色。这取决于用户代理如何决定接受响应。

根据http标准,响应标头指示文件应被视为附件。

但是这里:https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html

还说:"如果在具有处置类型"0"的响应中使用该报头;附件">application/octet流内容类型,隐含的建议是用户代理不应显示响应,而是直接输入"将响应另存为…"对话框">

UPDATE:RFC 6266,指出不再需要关于内容类型为应用程序/八位字节流的限制

因此,从技术上讲,您的内容类型将决定权留给用户代理(在本例中为chrome)来显示内容与否。

我们现在正在实现浏览器之间的某种平衡,所以为了明智地选择,我建议进行跨浏览器测试。

理想情况下,这将在您的CI工作流程中使用一些工具,如souce实验室或您的自定义解决方案。

另一个快速选择是将这个简单的html示例上传到一些主机上,比如免费的github repo,并从这样的页面导航原始文件:https://www.browserling.com/

它允许您在不同的操作系统和浏览器中导航特定的url。

它之所以有效,是因为chrome足够聪明,可以识别您在网页内部使用它,而且它没有显示另存为对话框,但为什么您要冒使用的风险

content-disposition:attachment;

您应该使用:

Content-Disposition: inline

这里还有一个关于堆栈溢出的问题,它的答案与您的问题类似,解释了使用attachment而不是内联之间的区别。看看这个问题的批准答案。

相关内容

  • 没有找到相关文章

最新更新