使用 ETag 识别唯一用户

在网络上,Cookie 是识别用户的基础,无数的广告投放平台,通过 Cookie 来记录用户的 ID,监测用户看过什么广告、点过什么广告、看过哪些网页,通过这些信息推算用户的兴趣爱好,进而再推送更加精准的广告。

越来越多的浏览器推出“无痕浏览”、“隐私模式”等功能, 360 等安全卫士软件也自带了清理 Cookie 的功能,这就导致常规使用 Cookie 识别用户身份的手段越来越不准确,这里介绍另一种方法,使用浏览器缓存的特性,来记录和识别用户的唯一身份。

浏览器的缓存策略

当用户浏览不同的网页时,图片等静态资源会重复下载,比如网站的 logo,每浏览一次,logo 图片都会重复下载一次,为了避免资源浪费,服务器可以设置如下的机制:

  1. 浏览器第一次浏览该网页,浏览器向服务器发起下载图片的请求
  2. 服务器返回图片,并为图片加一个 ID 作为标记,这个 ID 叫 ETag,占用的流量为 2M,图片传输消耗时间约5秒
  3. 用户刷新网页,再次请求同一张图片,浏览器会带着上一次服务器分配的 ID
  4. 通过判断 ID 和过期时间,服务器发现这个用户在几分钟前才下载过这个图片,直接返回 304 状态,表示请浏览器直接读取本地缓存,这次占用的流量约等于 0,由于直接读取的本地缓存,图片传输消耗时间为 0。

通过以上的策略,可以减少网络传输,加快页面加载时间。

服务器设置的 ETag 以及在浏览器中自动携带的参数,具体为 Response Header 中的 `ETag` 和 Request Header 中的 `If-None-Match` ,浏览器开发者工具查看结果如下图:

如何应用到广告系统

既然浏览器在第二次请求图片的时候会带着服务器分配的 ID,那么这个 ID 就可以作为识别用户身份的依据,用户第一次访问,请求一个广告资源,服务器为图片设置一个 ID(ETag),通过 referral 获取用户浏览网页的地址,通过语义分析判断该用户的兴趣爱好,当用户再次浏览时,客户端携带这个 ID 请求服务器,这一次服务器便知道了该用户的兴趣爱好,针对性投放更加精准的广告。当然,背后用户兴趣的判断是基于海量浏览记录, 用户 ID 的识别也不能单靠 ETag,需要和其他很多策略混合使用。

使用 ETag 识别唯一用户的优点:

  1. 为了提高网页浏览速度,浏览器一般不会主动清除缓存,可以和 Cookie 结合使用。
  2. 客户端不需要很高的权限,不需要部署 javascript 代码,一个图片请求就可以实现。

对唯一用户识别的研究,国外有个非常著名的项目叫 Evercookie,使用十几种方法来标记用户 ID,清除 Cookie 同时清除缓存,甚至开启浏览器的隐私模式依旧能识别出你的用户 ID,此项目在 github 中开源,感兴趣的可自行研究其源码。关于 Evercookie 的中文介绍: http://www.ituring.com.cn/article/35102



使用 ETag 识别唯一用户》上有2条评论

评论已关闭。