如果UA提出请求,则协商为webp提供服务

如果浏览器支持,可以使用mod_negotiation提供webp图像,否则使用jpg?

例如,如果我使用path / images / test链接到一个图像,那么如果UA知道webp或jpg,则它会提供在/images/test.webp中找到的图像?

我试过了,但是看起来,Chrome中的Accept标头至少看起来像Accept:*/* ,而不是指定图片类型。

如果这不是这样做的,有没有人有任何其他建议?


为了提供WebP图像,我在nginx中使用了一个重写规则来检查文件是否存在并支持WebP图像。 自从OP提到mod_negotiation以来,我将它移植到Apache mod_rewrite。 重写将查找包含单词“chrome”的用户代理,然后检查具有.webp扩展名的文件,该文件的名称和路径与.jpg或.png文件的名称和路径相同,如果是,则为WebP文件提供服务。 重写规则有点笨拙,但它完成了工作。

AddType image/webp .webp
# strip the extension off of all JPGs
RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]
RewriteRule (.*).jpg$ $1

#check for a webp file, if so serve it
RewriteCond   %{REQUEST_FILENAME}.webp  -f
RewriteRule   (.*)  $1.webp [E=WEBP:1]

#check for if we did not have a webp file and we do have a jpg, if so serve it
RewriteCond   %{REQUEST_FILENAME}.jpg  -f
RewriteCond   %{REQUEST_FILENAME}.webp  !-f
RewriteRule   (.*)  $1.jpg

# strip the extension off of all PNGs
RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]
RewriteRule (.*).png$ $1

#check for a webp file, if so serve it
RewriteCond   %{REQUEST_FILENAME}.webp  -f
RewriteRule   (.*)  $1.webp [E=WEBP:1]

#check for if we did not have a webp file and we do have a png, if so serve it
RewriteCond   %{REQUEST_FILENAME}.png  -f
RewriteCond   %{REQUEST_FILENAME}.webp  !-f
RewriteRule   (.*)  $1.png

对于我的网站,在能够在浏览器中检测到对WebP的支持而不依赖于用户代理字符串之后,我能够通过JavaScript加载我的照片。 如果在开始加载我的图像之前,存在WebP支持而不是设置cookie。 因此而不是这个RewriteCond

RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]

我会用这个

RewriteCond %{HTTP_COOKIE} supports_webp

Accept头部不是必需的,并且当它被提供有意义的值时,它仅向服务器指示客户端应该针对该特定请求接收什么内容类型。

在过去,就像png得不到很好的支持一样,我使用了这样的规则(适合你的问题)。 Webp由两个浏览器支持,使规则非常简单。

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT}  Chrome/ [OR]
RewriteCond %{HTTP_USER_AGENT} Opera.*Version/11.1
RewriteRule .* - [E=imgext:webp,T=image/webp]

RewriteCond %{ENV:imgext} !webp
RewriteRule .* - [E=imgext:jpg]

RewriteCond %{REQUEST_URI} ^/images/
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) $1.%{ENV:imgext} [QSA]
链接地址: http://www.djcxy.com/p/7079.html

上一篇: negotiation to serve webp if the UA requests it

下一篇: C# encoding a file in EBCDIC with packed decimals