为什么有些网站很喜欢在 URL 塞一大堆参数?

2020-06-05 00:30:05 +08:00
 RainyH2O

个人有收藏一些个人认为有价值的链接的习惯,为了简洁化都尽量最小化 URL 的参数数量。
最近越发觉得不理解为什么要塞一大堆冗余的参数在 URL 里,真有啥要传的为啥不直接放 POST 的 body 里?是出于什么考量这样设计的?或是某些技术上的限制不得不保持这样的现状?


举些例子:
B 站如果是搜索的方式找到一个视频,点进去就得带上 from=search&seid=XXX 的参数。自己收藏去掉也就算了,就是某些人写个百科,发个分享就直接复制粘贴。虽然也不是说不好吧,就是有时候真的觉得强迫症的难受,明明保留到 BV 号就足够唯一标识一个视频了。
还有微博、微信之类也是带一大堆不知道干啥用的参数。仔细研究一下还会发现通过不同方式进入同一个页面还会出现不同参数的可能性。有些形式很容易就看得出唯一标识的字符串,有些就难了光看参数名也看不出是啥意义。


临发帖前突然搜到了个术语,这就是所谓“数据埋点”吧?不过还是不理解为啥不放 POST 的 body 里,所以想了下还是发出来问问。。。因为这种方式埋点容易实现么?

3018 次点击
所在节点    问与答
24 条回复
jeffpan
2020-06-05 00:34:57 +08:00
数据埋点
Perry
2020-06-05 00:35:45 +08:00
ayase252
2020-06-05 00:35:49 +08:00
因为你直接通过浏览器访问是 GET 请求
wangkun025
2020-06-05 00:36:46 +08:00
因为……有用。
Jacky23333
2020-06-05 00:44:56 +08:00
兄弟,你的书签不就是 get 方式,参数怎么 body
unixeno
2020-06-05 00:56:18 +08:00
复制链接你咋复制一个 post 出来
RainyH2O
2020-06-05 01:08:28 +08:00
@Perry 确实光想着靠 POST 传参忽视 anchor 不能 POST 了。。。不过看回答也有靠脚本发的方式把。。。当然主要是实际我也不是很懂埋点。。。如果从别人分享的链接点进去带了这些参数对于分析难道不是干扰么。。。
ysc3839
2020-06-05 01:15:32 +08:00
用来跟踪用户,还有用作 access token 的吧?
前者是比较常见的,比如 from utm_source 这些,一般只会跟踪访问的来源,少数还会包含分享者的信息。
而后者我只见到微信和酷安这么做过,链接中有很长的 “token”,去掉这些 token 只会就不允许访问对应网页了,只有完全包含的情况下才能打开页面。
RainyH2O
2020-06-05 01:22:13 +08:00
@ysc3839 用途的话大致还是能猜到了,现在比较疑惑的是实现的方式。。。
RainyH2O
2020-06-05 01:24:43 +08:00
@ayase252 正常想的话难道不是进去目标页面以后运行个脚本收集数据后 POST 么。。。为何要在访问链接的瞬间去收集呢。。。
RainyH2O
2020-06-05 01:29:49 +08:00
@RainyH2O 说的有点问题,确实埋点的话得在访问链接的瞬间收集才有意义,不过提交可以适当延后到目标页面加载 完毕后再提交吧
msg7086
2020-06-05 01:43:38 +08:00
「就是某些人写个百科,发个分享就直接复制粘贴」
都复制粘贴了为什么要怪网站呢,人家明明就支持短链直达的。

至于埋点为什么要放在 URL,当然是因为不放白不放啊。URL 本来就是 URL,能到达资源就行了,设计出 URL 这个功能的人也没把美观作为卖点。

你说目标页面加载完提交,怎么提交?不得用 JavaScript 吗。
你能保证用户的 JavaScript 就一定开着而且一定会运行?
以前做统计还有一种是用一个透明像素点来做,然而你也不能保证浏览器一定会加载这个像素点。
RainyH2O
2020-06-05 01:54:11 +08:00
@msg7086 收集数据也得靠 JavaScript 吧。。。如果数据都收集不了那也没法提交吧。。。JavaScript 没运行的话不就压根没提交的必要了吧。。。
FaceBug
2020-06-05 02:25:04 +08:00
手机数据为啥要靠 js

你 url 里面包含的参数

哪怕这个页面是个纯静态的

也能通过 Nginx 日志拿到啊



URL 主要是用来统计分享、来路,也算是埋点的一种

这种行为就是必须在打开的一瞬间统计的

你前面所述的用户行为统计,是进入站点之后

比如点击了什么按钮、访问的链路等等,这个确实可以 POST

但是判断用户首次从什么渠道来,必须在 get 里面的


另外,还有一些参数,涉及到反爬、安全校验等

也是必须在 get 里的

比如在参数里面带上有效时间、密钥等信息

因为爬虫每次打开,你可以理解为是一个全新的用户

和前面统计来路的埋点是一回事

你只能,也必须在第一次打开页面的那一刻,通过 get 就要拿到相关的参数

才判断是否应该返回正确的内容还是禁止访问
FaceBug
2020-06-05 02:29:02 +08:00
关于延迟收集数据的相反,就算是延迟,前提条件是:有!数!据!

如果渠道、邀请码、这种参数,不写在 get 里,请问,延时发送的数据,从哪里来?凭空来?
falcon05
2020-06-05 02:34:08 +08:00
因为就是这样用的
FaceBug
2020-06-05 02:34:50 +08:00
也许你还纠结一个问题,就是为什么第 2 、3 、4 次打开的时候,还要带上这些参数呢

举个例子,比方说你打开 V2EX 首页,再打开一个帖子,按道理帖子打开的时候,只要有个帖子 ID 就好了,甚至帖子 ID 这个参数都可以 POST 来对不对

但是,如果你想把这个帖子发送给我看

那么 ID 是不是必须在 URL 里,不然我光复制 https://www.v2ex.com/t/,v2 怎么知道我要访问哪个帖子

同样,如果站长还想统计到,我是从哪个帖子、哪个用户导流来到 V2 的

那 url 还必须包含 fromuser=RainyH2O

因为作为用户的你只会简单的复制这个 URL,不会再去特意帮站长拼接参数

我收到的链接也是你直接发我的这个,我只管打开

所以只有 URL 同时包含了帖子 ID 、fromuser 的时候,站长才能知道,我是通过哪个帖子、哪个推荐人来到 v2 的

站长永远不知道你会把哪个帖子发给我,他只能在每个帖子的 URL 里,都默认带上帖子 ID 和你的用户 id
chenxytw
2020-06-05 02:50:49 +08:00
我不是很懂,我感觉有这么几个原因,见笑了。
1.浏览器可以禁用 js
2. from 这个参数就决定了有太多来自不可控区域的访问,比如搜索引擎,比如分享到朋友圈。为了简单选择兼容性最高的方案
3. 也许他们是直接解析 webserver log 里的 url 来统计数据的...
jugelizi
2020-06-05 08:02:51 +08:00
他喵的我分享一个网址出去别人打开了 网站怎么知道是我分享的 当然把我的标识加在 url 地址后面啊
nutting
2020-06-05 08:41:27 +08:00
因为你没从运营角度考虑,实际还有渠道,来源什么的这些东西呢,都是迭代发展起来的,只能传参,站点间一般都是 url

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

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

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

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

© 2021 V2EX