埋点
埋点
1.埋点概述
所谓埋点就是在应用服务器中的每一个页面中都嵌入一段js脚本 使用户在访问页面时 自动触发js 收集用户访问行为日志 并提交到日志服务器。
2.js脚本编写
pv
点击量 - 一次请求就是一个pv - 只需要在日志服务器中记录访问次数 就是pv的值 并不需要在js中获取额外数据
uv
独立访客数 - 一天内 独立访客的数量 - 独立访客?一个用户就是一个访客 - 如何去识别一个用户 - 在cookie中保留一个用户标识来识别这个用户 - 在日志服务器收到请求后 获取这个cookie的值 如果发现在今天的数据中没有出现过就说明是一个新的uv 如果出现过 不能算作一个新的uv - js中应该有对这个cookie的处理
尝试从浏览器中获取cookie ar_stat_uv
if(获取不到){
//这是用户第一次访问
生成一个新的用户的唯一标识
将这个唯一标识生成一个名为ar_stat_uv cookie 保存到浏览器中 并指定保存的时长10年
并将这个唯一标识作为未来提交给日志服务器的信息的一部分拼接到提交信息中
}else{
//这个用户不是第一次访问
获取这个cookie ar_stat_uv值 就是该用户的唯一标识
将这个唯一标识作为未来提交给日志服务器的信息的一部分拼接到提交信息中
}
vv
独立会话数 - 一天之内产生的会话的总数 - 会话 - 如何识别会话呢 - 在浏览器内部保留一个cookie 保存会话的唯一标识 - 在服务器中获取到用户提交的日志信息后 可以通过这个唯一标识区分出 这是不是一个新的会话 以及可以区分出哪些请求其实是来自于同一个会话的 - js 代码中应该包含这样的代码 来通过设置识别cookie唯一的区分不同的会话
尝试获取cookie ar_stat_ss 获得当前会话的编号
if(获取不到){
//这是一次新的会话
生成一个唯一标识这个会话的编号
将这个 会话的编号 当前时间 当前访问页面的次数(第一次就是0) 保存到浏览器中名为ar_stat_ss cookie中 作为会话级别的cookie
在将这个会话编号作为未来要提交给日志服务器的信息的一部分拼接
}else{
获取cookie中的信息,包括会话编号 包括上次访问的时间 包括 访问的页面总数
if(当前时间 - 上次访问的时间 > 超时时间){
//虽然这个cookie存在但是已经超时 作废
重新生成一个会话编号
重新获取当前时间
重新获得页面访问总数 - 第一次就是0
存入cookie 作为一个新的会话的标记
并作为未来要提交给日志服务器的信息拼接
}else{
//存在会话相关的cookie 并且没有超时
获取会话编号
获取页面访问次数
获取最新时间
将会话编号 和 页面访问次数+1 和 最新时间 后作为未来要提交给日志服务器的信息拼接
更新cookie 会话编号不变 时间变为当前时间 页面访问总数变为 之前的访问总数+1
}
}
br
跳出率 - 一天之内 跳出的会话总数/会话总数 得到的比率 - 会话总数:获取一天之内所有的会话编号去重 得到的数量就是今天一天之内会话的总数 - 跳出的会话总数:检查哪个会话编号对应的访问记录只有一个 这样的会话总数就是跳出的会话总数 - 而这两个信息 通过vv信息可以计算而得到 并不需要浏览器提供更多的信息
newip
新增ip数 - 一天之内 有多少ip是历史上从未出现过的 总数就是今天的新增ip数 - 今天的ip信息 历史的所有ip信息 - 访问的客户端的ip信息 从服务器端获取 - 历史ip 从历史数据中获取 - 不需要在js中获取额外信息
newcust
新增客户数 - 一天之内 有多少uvid 是在历史中从未出现过的 - 今天所有的uvid 去重后 和历史的所有uvid做比较 检查有多少是历史上从未出现过的 - 需要uvid 而这个数据上面在计算uv的时候 已经有了 - 不需要在js中获取额外信息
avgtime
会话平均访问时长 - 一天之内 所有会话的访问时长的平均值 - 会话的访问时长:会话最后一个页面的访问时间 - 第一个页面的访问时间 - 会话中页面的访问时间 在计算vv时已经得到了 - 不需要js提供更多信息
avgdeep
会话平均访问深度 - 一天之内 所有会话访问深度的平均值 - 会话的访问深度:一个会话访问的所有页面的去重后的总数 - 每个会话中所有的请求访问的页面地址 - 需要通过js提供 访问的页面地址信息
================================================
http协议
请求
请求行
请求头
referer
实体内容
响应
状态行
响应头
实体内容
URL编码
http协议 只支持iso8859-1的字符
那么非iso8859-1的字符 如何用http协议处理呢? - URL编码 - 将非iso8859-1的字符 用iso8859-1的字符来表示的技术
中 -->
0000 1111 0F
0001 1111 CD
0011 1111 3B
--> %0F%CD%3B
国 -->
0101 0101 2F
0001 0101 66
0100 0101 9D
--> %2F%66%9D