在我们的电商站点的 google 分析中, 存在大量的 direct 流量, 这部分流量按照 google 给出的解释是用户直接输入网址进入网站或者没有正确获取到 referrer 请求头信息从而记录的.
为了能够准确的了解用户在从外站跳转到我站点时所发生的跳转过程, 分析 referrer 信息丢失的原因, 从而看是否能通过技术的手段调整这部分数据, 特别的进行一些测试.
1.在 shell 中使用 curl 模拟手机 user agent 请求 pc 端 http 链接, 使用 L 参数跟踪跳转, 跳转之后, referrer 保留.
curl -I http://www.dressafford.com/cheap-wedding-dresses.html --referrer http://www.guohuawei.com --user-agent "ipad" -L
84.17.41.94, 64.252.70.208 - - [12/Sep/2022:10:39:21 +0000] "GET /cheap-wedding-dresses.html HTTP/1.1" 200 251938 "http://www.guohuawei.com" "ipad"
通过测试用例 1 , 我们可以发现, 默认情况下服务器端在跳转时, referrer 信息会携带.
2.在第三方网站页面中插入 pc 端 https 链接, 使用手机浏览器点击网页中的链接, 跳转之后, referrer 保留.
36.106.254.39, 64.252.111.201 - - [12/Sep/2022:10:54:42 +0000] "GET /cheap-wedding-dresses.html HTTP/1.1" 200 24258 "https://www.guohuawei.com/" "Mozilla/5.0 (Linux; Android 10; GM1910) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36"
通过测试用例 2, 我们可以发现, 从 https 的 pc 跳转到 https 的 mobile 网站, referrer 信息不会丢失.
3.在第三方网站页面中插入 pc 端 http 链接, 使用手机浏览器(打开的时候强制是 https 站点)点击网页中的链接, 跳转之后, referrer 丢失.
36.106.254.39, 64.252.112.164 - - [12/Sep/2022:10:53:45 +0000] "GET /cheap-wedding-dresses.html HTTP/1.1" 200 24258 "-" "Mozilla/5.0 (Linux; Android 10; GM1910) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36
4.在第三方网站页面中插入移动端 http 链接, 使用手机浏览器(打开的时候强制是 https 站点)点击网页中的链接, 跳转之后, referrer 丢失.
36.106.254.39, 64.252.111.212 - - [12/Sep/2022:10:55:47 +0000] "GET /cheap-wedding-dresses.html HTTP/1.1" 200 24267 "-" "Mozilla/5.0 (Linux; Android 10; GM1910) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36"
5.在第三方网站页面中插入移动端 http 链接, 使用电脑访问第三方网站页面的 https 地址,点击链接, 跳转之后, referrer 没有传递, 下面记录的是 pc 端的请求日志, 日志里面已经没有了 referrer 信息, 也就是说在 https 页面中如果存在 http 链接, 点击跳转时, 属于降级, 浏览器不会将 referrer 信息携带到目标站点中, 这主要是处于安全性的考虑.
84.17.41.94, 64.252.72.154 - - [12/Sep/2022:11:52:06 +0000] "GET /cheap-wedding-dresses.html HTTP/1.1" 302 142 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
通过测试用例 3,4,5 我们可以发现, 如果 https 页面跳转到 http 页面, 会导致 referrer 信息丢失, 由于这次跳转是从外站到我站, 这个跳转是否允许 referrer 保留下来, 不能由我方决定.
6.在第三方网站页面中插入移动端 http 链接, 使用电脑访问第三方网站页面的 http 地址,点击链接, 跳转之后, referrer 保留了下来.
84.17.41.94, 64.252.121.127 - - [12/Sep/2022:13:58:12 +0000] "GET /cheap-wedding-dresses.html HTTP/1.1" 200 24258 "http://www.guohuawei.com/" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
通过测试用例 6 我们可以发现, 如果是从 http 跳转到 http 网站, 然后再次在同域名下 从 http 跳转到 https 下, referrer 信息得到了传递和保留.