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版本所以没有太多意义)