检测浏览器是否支持WebP格式?(服务器端)

Gaj*_*jus 15 php webp

已经有一个关于使用客户端检测WebP支持的线程.如何使用服务器端检测WebP支持?

Dav*_*ave 31

今天,您应该检查accept标题image/webp.所有支持WebP的浏览器都会将其作为所有请求(图像和非图像)的接受字符串的一部分发送.简而言之:

if( strpos( $_SERVER['HTTP_ACCEPT'], 'image/webp' ) !== false ) {
    // webp is supported!
}
Run Code Online (Sandbox Code Playgroud)

(您可能希望使用preg_match而不是添加单词边界检查和不区分大小写,但在现实世界中这应该没问题)


这是我几年前的原始答案,当时上述不可靠

"正确"的方法是检查accept发送的标题,但Chrome中的错误意味着image/webp即使它支持它也不会列出.

这是一个相关的论坛主题:https://groups.google.com/a/webmproject.org/forum/#!topic/ webp-discuss/ 6nYUpcSAORs

链接到此错误跟踪器:https://code.google.com/p/chromium/issues/detail? id = 169182 ,然后链接到此错误跟踪:https://code.google.com/p/chromium/issues /细节?ID = 267212

最终结果?虽然目前尚未实施,但Google Chrome很快会明确列出image/webp为图片非图片请求的可接受类型.因此,为HTML提供服务的脚本可以检查它.Opera已经image/webp作为标准accept标题的一部分发送(无论是否是图像请求,都是如此).

所以,你可以像这样检查:

if( strpos( $_SERVER['HTTP_ACCEPT'], 'image/webp' ) !== false || strpos( $_SERVER['HTTP_USER_AGENT'], ' Chrome/' ) !== false ) {
    // webp is supported!
}
Run Code Online (Sandbox Code Playgroud)

(你可能想要使用preg_match而不是添加单词边界检查和不区分大小写,但在现实世界中这应该没问题.你可能还想检查至少版本6的Chrome,但几乎没有人在运行-date版本所以没有太多意义)

  • 笔记!运行 Big Sur 的 Mac 上的 Safari 目前不会在接受标头中发送图像/webp。这就是我现在在 Safari 中接受标头的样子: `Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` (3认同)
  • Firefox 从版本 65 开始支持 WebP 图像,但从版本 66 开始,他们决定从 Accept header 到主文档中删除 image/webp。 (2认同)