Etager 一个基于Etag的简易的tracker实现

2013-09-13 17:12:39 +08:00
 turing


通过Etag而不是cookie来追踪用户的访问有个好处,就是客户端不用部署js,省事儿。

看图,可以看到:当用户第一次访问带有tracker.jpg这个假图片的网页时,后台会分配一个uuid给这个用户,当第二次访问任何其他带有这个图像的url的时候,由于返回了相同的Etag,浏览器会把这个请求设成304,不会从服务器端再下载任何内容(本身这个tracker.jpg就是0b的)

所以,当这个用户清空他的浏览器缓存之前,我们可以一直非常低成本的追踪同一个用户的访问路径。是个非常有趣的尝试。~

Github:
https://github.com/turingou/etager
4802 次点击
所在节点    Node.js
12 条回复
airyland
2013-09-13 18:48:08 +08:00
支持一下。楼主又挖坑啦
j1anb1n
2013-09-14 01:05:04 +08:00
是的,我们公司种UUID就是用这种方式
pythonee
2013-09-14 21:28:32 +08:00
不是很懂这个流程,那你是怎么标识一个客户端的呢,怎么判断firstAccess的呢?这里tracker.jpg设成304的作用是什么呢
turing
2013-09-14 21:44:44 +08:00
pythonee
2013-09-14 22:33:04 +08:00
哦,原来我之前没有注意过Etag啊
wudikua
2013-09-14 23:05:39 +08:00
楼主我看了一下你发的那篇英文的文章,他其实讲的就是一种基于etag的session的实现,而不是基于cookie里面的session id,但是这个怎么追踪的用户访问路径啊?每次访问的都是/demo/tracker.jpg固定的链接,这里面都没包含用户的访问行为啊。如果是访问的/demo/url1和/demo/url1/tarcker.jpg,/demo/url2和/demo/url2/tracker.jpg 还可以理解。
turing
2013-09-15 00:23:24 +08:00
@wudikua

我的方法是在中间件中生成的时候加入from参数,比如访问/page/1 时生成 tracker.jpg?form=/page/1 ,第一次访问的时候记录这个uuid到session,然后每次访问就都知道是同一个用户了。
tangzx
2013-09-15 09:17:14 +08:00
遇到长城宽带、网吧、办公室网络这样带transparent proxy的环境就挂了
reorx
2013-09-15 11:22:01 +08:00
楼主知否为何 Google Analytics 在用的是 1x1 的 gif 图而非 0 字节图片呢?我想是否可能是 0 字节图片不够”正规“,毕竟它不具备可显示性,可能被认为是错误的图片请求?
turing
2013-09-15 11:55:19 +08:00
@reorx GA有用到这种方法吗?我还没注意过。。我默认写样式隐藏了,但对某些终端不太友好(或者会产生样式覆盖的问题),所以GA可能想放一个可以显示的图片吧~
reorx
2013-09-15 12:35:09 +08:00
GA 通过请求一个叫做 _utfm.gif 的 1x1 像素大小的图片进行 track,和楼主一样也是通过 url 的 query string 向服务器提交追踪数据。好处是避免了使用 js 发出 ajax 请求(同时规避了跨域请求的问题)。但是 GA 没有用 Etag 作为用户身份的凭证,而是把整个 cookie 都用 query string 传过去了。

之前在 SA 上看过有人问为何用 gif,答曰 1x1 的 gif 是所有同样大小的图片类型中最小的,但没有人看到问为何不返回 0 字节的,所以我也只是猜想用 1x1 可能更好一些
reorx
2013-09-15 12:36:23 +08:00
@turing SO 打成 SA 了,大概是饿昏了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/82340

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX