【发布时间】:2016-06-04 11:46:44
【问题描述】:
我想使用 WebP 格式优化我网站上的一些图像。
借助 Google 开发的算法,Webp 图像是高度压缩的 jpeg 和 png。
但是,webp 图像只能在现代 Chrome 和 Opera 中显示。
如果浏览器支持 webp,它会在 Accept HTTP 标头中指定 image/webp。
如果浏览器支持 webp 格式并且图像的 webp 版本是否存在于磁盘上,如果存在 - 提供 webp 图像,如果不支持 - 提供默认图像,则检查 nginx 是个好主意。
例如:
http://example.com/dog.png,Accept: image/webp, image/png, image/jpeg。 nginx必须发送dog.png.webp
http://example.com/dog.png,Accept: image/png, image/jpeg。 nginx必须发送dog.png
可以在这个 nginx 配置 https://github.com/igrigorik/webp-detect/blob/master/nginx.conf 和 https://github.com/kavu/sprockets-webp 中找到更多解释#nginx
没关系。但我正在使用 CloudFlare CDN 来加快资产交付速度。
在这样的图像服务条件下,我们必须添加标题Vary: Accept,这样浏览器和代理中的缓存才能正常工作。但有个问题! CloudFlare 仅支持 Vary: Accept-Encoding。这被描述为here。
客户端将首先获得由 CloudFlare 缓存的图像版本(webp 或常规),如果客户端不支持 webp,它将看不到图像,这很糟糕。
有什么解决办法吗?
【问题讨论】:
-
我可以为 webp 图像设置
Cache-Control: private,这样 CloudFlare 就不会缓存它们,请求将转到我可以检查 webp 支持并发送必要版本的来源。
标签: nginx cdn cloudflare