通过http协议中的etag进行用户追踪

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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值