【问题标题】:Right click "save as" selects jpg image instead of webp, but webp is displayed右键“另存为”选择jpg图片而不是webp,但是显示的是webp
【发布时间】:2023-03-23 16:10:01
【问题描述】:

我正在使用 .htaccess 向支持它的浏览器提供 webp 图像。

RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.(jpe?g|png|gif)$ $1.webp [T=image/webp,E=REQUEST_image]
Header append Vary Accept env=REQUEST_image
AddType image/webp .webp

Source: WebP images with htaccess

基本上,它的作用是从同一位置返回一个 .webp 图像,而不是请求的 jpg/png/gif,如果它存在且受支持的话。

这在 Chrome、Firefox、IE11、Edge 中运行良好...尚未测试 Safari。

但是,我的问题是,当我右键单击网站“另存为”时,它会自动选择 .jpg 版本。如果 .jpg 版本不存在,它会尝试保存整个 html。如果使用它,预期的行为是保存显示的 .webp 版本。奇怪的是,它确实会尝试将 .webp 保存在 Firefox 中,但当我在 Firefox 中使用页面信息(Windows 上的 ctrl+i)尝试相同的操作时,它会选择 .jpg。

这怎么可能? 这有什么遗漏/错误吗?

我检查了显示的图像是一个实际的 webp,它是。内容类型和文件大小都与 webp 匹配。

【问题讨论】:

  • 恐怕您正在研究当今操作系统中文件处理的众多无关紧要的方面之一。原因是“文件扩展名”的想法已经被认为是区分文件类型的聪明想法太久了。取而代之的是,这些天来,事情转向了指定的 mime 类型,但是您仍然到处都有这些老式的方法。遗留代码。因为它既便宜又好用(适用于 > 99% 的案例和用户),所以没有人真正关心。对于 MS-Windows 平台尤其如此。
  • @arkascha 我一开始也这么认为,但后来我做了一些测试。我可以在一定程度上确认 Chrome 并不太关心文件名,因为当我将请求的图像定向到图像脚本时(它返回了 webp,但没有相同的标题),那么“另存为”正确假设网页。所以唯一的区别是我在 Vary 标头中使用了 Accept-Encoding 而不是 Accept。我不是专家,但这是否意味着这是某种缓存问题?我再次尝试使用 htaccess 代码,但也将 Vary 标头更改为 Accept-Encoding,这也有效。
  • @arkascha 我可能应该做更多的测试,但至少证明它不仅考虑到 img 标签中的文件扩展名。澄清一下,我所有的测试都有 src="path/to/img.jpg",并且接受它显示 webp,但尝试另存为 jpg,而接受编码它显示 webp 并尝试另存为 webp。跨度>

标签: html image apache .htaccess webp


【解决方案1】:

我的工作解决方案是:


检查浏览器是否支持 WebP 图片

RewriteCond %{HTTP_ACCEPT} image/webp

检查WebP替换图片是否存在

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} -f

改为提供 WebP 图片

RewriteRule (.+)\.(jpe?g|png|gif)$ $1.webp [T=image/webp,E=REQUEST_image]

所以试着把RewriteCond %{DOCUMENT_ROOT}/$1.webp -f改成

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} -f

在 Safari 和 Firefox 上测试。

【讨论】:

  • 这是错误的。 %{REQUEST_URI} 是请求的文件 (jpg/png/gif),因此您的方法只是检查请求的文件是否存在,然后改为提供 webp。它从不检查 webp。不管怎样,我认为你误解了我的问题。 htaccess 工作得很好,问题在下面描述。
  • 恐怕你是对的,我误会了。对不起:)
猜你喜欢
  • 2022-01-03
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2019-09-20
  • 1970-01-01
相关资源
最近更新 更多