# 为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片？

* 为什么不能直接用GET/POST/HEAD请求接口进行上报？

一般而言，打点域名都不是当前域名，所以所有的接口请求都会构成跨域。而跨域请求很容易出现由于配置不当被浏览器拦截并报错，这是不能接受的。所以，直接排除。

* 为什么不能用请求其他的文件资源（js/css/ttf）的方式进行上报？

创建资源节点后只有将对象注入到浏览器DOM树后，浏览器才会实际发送资源请求。反复操作DOM不仅会引发性能问题，而且载入js/css资源还会阻塞页面渲染，影响用户体验。 但是图片请求例外。构造图片打点不仅不用插入DOM，只要在js中new出Image对象就能发起请求，而且还没有阻塞问题，在没有js的浏览器环境中也能通过img标签正常打点，这是其他类型的资源请求所做不到的。

* 同样都是图片，上报时选用了1x1的透明GIF，而不是其他的PNG/JEPG/BMP文件

1x1像素是最小的合法图片。而且，因为是通过图片打点，所以图片最好是透明的，这样一来不会影响页面本身展示效果，二者表示图片透明只要使用一个二进制位标记图片是透明色即可，不用存储色彩空间数据，可以节约体积。因为需要透明色，所以可以直接排除JEPG(BMP32格式可以支持透明色)。最小的BMP文件需要74个字节，PNG需要67个字节，而合法的GIF，只需要43个字节。

### 结论

* 没有跨域问题
* 不会阻塞页面加载，影响用户体验
* 在所有图片中体积最小，相较BMP/PNG，可以节约41%/35%的网络资源。
