关键字: image beacon
, pixel tracking
之前也有注意到诸如 Google Analysis / 百度统计 的服务都会产生后缀是gif
的请求, 但没有深究历史背景, 借此机会尝试去了解下.
常见统计服务商的收集API
Google Analysis
通过访问 Twitter 首页, 发现最新版的已经不是 gif, 但返回 gif 类型, 大小是 35 字节:
早期的 Google Analysis 也是 gif, 地址是 https://www.google-analytics.com/__utm.gif, 35 字节.
customer.io
访问 customer.io 首页, 地址带有 gif 后缀, 返回 gif 类型, 36 字节.
友盟+
访问 友盟 首页, 地址带有 gif 后缀, 返回 gif 类型, 43 字节.
百度统计
访问 Teambition 首页, 使用了百度统计, 地址带有 gif 后缀, 返回 gif 类型, 43 字节.
微博
访问 微博 首页, 收集地址带有 gif 后缀, 返回 gif 类型, 35 字节
简单总结
目前大多数统计的请求地址是带有gif
后缀的, 接口返回一个 1x1 尺寸的 gif 图片,大小 35/36/43 字节.
问题及解释
使用 gif
后缀的传统是哪来的?
最早的猜测是 Google Analysis.
为什么是图片? 为什么是 gif
而不是其他格式?
图片的优势:
- 不阻塞页面加载;
- 自动触发;
- 可以内嵌到邮件中(邮件不支持javascript; 邮件的阅读统计需求);
- 没有跨域问题.
gif
的优势:
- 1x1的尺寸够小(最小35字节);
- 出生早(gif:1987/1989, jpeg:1992, png: 1996);
- 浏览器支持更广泛Image format support
同样是 1x1
的尺寸, 为什么大小不一样?
35/36字节的gif: 是1x1像素的白色图片; 43字节的gif: 是1x1像素的透明图片;
参考资料
- 网站统计中的数据收集原理及实现
- CORS——跨域请求那些事儿
- Wiki: Web beacon
- Why does Google Analytic request a GIF file?
- Why does Google Analytics use __utm.gif?
- Cross-Origin Resource Sharing (CORS)
- Navigator.sendBeacon()
- Javascript Image Beacons For Tracking User Interactions
- How to use Google Analytics with a beacon image
- Using a Beacon Image for GitHub, Website and Email Analytics