为什么有些图片会在 URL 被访问时自动下载,而有些则不会?

Why do some images automatically download when their URL is visited and others not?

我觉得我应该能解决这个问题,但我做不到。

此图片尝试下载(在我测试的浏览器中:safari 和 chrome):

https://d3i71xaburhd42.cloudfront.net/9470b0dc3daccafa53ebe8f54d5bfed00afce2ce/29-Figure13-1.png

而这一张(以及大多数其他图片)会自动出现在浏览器中:

https://i.imgur.com/TvqM9Gp.png

这两个图像完全是任意示例;显然还有更多的例子可以指出。根据我的经验,大多数图像会自动显示在浏览器中,但偶尔有人想下载到 'downloads' 文件夹或其他熟悉的位置,我不太清楚为什么会这样。

是什么原因导致某些图像可以下载,而另一些图像可以通过浏览器自动打开并可以在浏览器中查看?

这通常是由两个 HTTP 响应 header 之一引起的。

Content-Disposition

这 header 告诉浏览器应该显示响应的内容 inline(默认值)或作为 attachment。后者会导致浏览器下载响应。

Content-Type

这告诉浏览器响应包含什么样的内容。根据内容类型,浏览器知道应该如何处理响应。例如 text/html 将导致浏览器将响应视为 HTML 并将其呈现。 text/plain 将导致响应显示为简单的文本文件,image/jpeg 将导致响应显示为图像,binary/octet-stream 将告诉浏览器,“这是二进制数据",这通常会导致浏览器下载文件。 MIME-types 的名单还在继续。

如果下载图像而不是在浏览器中显示图像,并且它没有 Content-Disposition 响应 header 设置为 attachment,通常意味着 Content-Type 设置不正确。对于您提供的第一张图片,Content-Type 设置为 binary/octet-stream,因此浏览器不会将其视为图片。