V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
RainyH2O
V2EX  ›  问与答

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

  •  
  •   RainyH2O · 2020-06-05 00:30:05 +08:00 · 3057 次点击
    这是一个创建于 1667 天前的主题,其中的信息可能已经有所发展或是发生改变。

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


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


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

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

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

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

    你 url 里面包含的参数

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

    也能通过 Nginx 日志拿到啊



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

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

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

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

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


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

    也是必须在 get 里的

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

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

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

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

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

    如果渠道、邀请码、这种参数,不写在 get 里,请问,延时发送的数据,从哪里来?凭空来?
    falcon05
        16
    falcon05  
       2020-06-05 02:34:08 +08:00 via iPhone
    因为就是这样用的
    FaceBug
        17
    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
        18
    chenxytw  
       2020-06-05 02:50:49 +08:00 via iPhone
    我不是很懂,我感觉有这么几个原因,见笑了。
    1.浏览器可以禁用 js
    2. from 这个参数就决定了有太多来自不可控区域的访问,比如搜索引擎,比如分享到朋友圈。为了简单选择兼容性最高的方案
    3. 也许他们是直接解析 webserver log 里的 url 来统计数据的...
    jugelizi
        19
    jugelizi  
       2020-06-05 08:02:51 +08:00 via iPhone
    他喵的我分享一个网址出去别人打开了 网站怎么知道是我分享的 当然把我的标识加在 url 地址后面啊
    nutting
        20
    nutting  
       2020-06-05 08:41:27 +08:00
    因为你没从运营角度考虑,实际还有渠道,来源什么的这些东西呢,都是迭代发展起来的,只能传参,站点间一般都是 url
    CODEWEA
        21
    CODEWEA  
       2020-06-05 15:09:16 +08:00
    因为要监测用户行为,那些 get 参数就是行为指标
    siweipancc
        22
    siweipancc  
       2020-06-07 21:33:34 +08:00 via iPhone
    我觉得你的问题在于 HTTP 基础不扎实……不然一个人思考就算是一天也足够了
    RainyH2O
        23
    RainyH2O  
    OP
       2020-06-08 14:03:26 +08:00
    @siweipancc HTTP 基础问题和这问题有啥关联么?这不是个纯业务问题么?靠 URL 传参只是数据收集的方式之一,靠其他方式收集的又不是不存在。这个问题哪有这么简单,我个人是因为搜到了篇文章:[日志采集与用户行为链路分析]( https://www.jianshu.com/p/ab04b1e3a512),感觉在这陪各位聊下去纯属浪费时间就不回了的。
    siweipancc
        24
    siweipancc  
       2020-06-09 13:00:52 +08:00 via iPhone
    @RainyH2O 嗯,好的,不送
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2747 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:46 · PVG 20:46 · LAX 04:46 · JFK 07:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.