1 什么是用户追踪
用户追踪是同过一个唯一标识能定位到一个用户。例如A用户访问网站,网站生成一个唯一cookie,随后用户请求都带上这个cookie,那么通过这个cookie就可以分析用户的访问或操作行为。
通过浏览器通常进行用户追踪使用的常用手段如几种,但不仅限于这几种。
- cookie
- localStorage
- sessionStorage
- ip
- userAgent
- canvas指纹
除此之外还可以通过http 1.1中的Etag来进行追踪。
2 etag简介
etag是http 1.1的特性,由服务端产生的一个标识,用来标识资源,当资源发生变化,etag发生变化,那么客户端就可以确定资源是否直接从缓存获取还是通过服务器端返回。通常和if-none-match结合起来一起使用。
如下图所示,当第一次发起HTTP请求资源时,返回的响应中会有一个Etag字段。
再次发起请求时,请求中会包含If-None-Match请求头参数。其值就是etag。服务器收到请求后与该资源的的etag值比较,相同则返回304,请求方直接使用本地缓存。而服务器也不会返回资源数据。如果不相同,则返回200。请求方重新解析返回的数据。
因此利用这个特性,可以通过一个唯一值来标记用户并跟踪。根据上面的介绍,以nodeJs为例。当服务器收到资源请求时,读取if-none-match,如果值存在,说明
之前这个url标识的资源被访问过,随后将之前访问的值打印在页面上。
const httpServer = require('http');
httpServer.createServer(function(req,res) {
let uid = req.headers["if-none-match"];
if(!uid) {
uid = Math.random().toString().slice(2);
}
res.writeHead(200,{"etag":uid});
res.end(`hello,the ${uid}\n`);
}).listen(8413,"localhost");
总结
追踪用户,就是通过一个唯一标识去标记用户。etag是http 1.1协议中定义的一种方式,原本用来加快资源加载。由于其特点,也可以用来追踪用户。
参考
[1] cookielesscookies,http://lucb1e.com/rp/cookielesscookies/
[2] etag rfc,https://tools.ietf.org/html/rfc7232#section-2.3
[3] etag header,https://brett.is/writing/about/cookieless-user-tracking/