第 2 课

查询参数模型

理解重复键、空值、flag、数组以及不同框架的差异。

查询字符串看起来像简单的键值对,但不同框架会用不同模型解释它。

?tag=api&tag=json&draft=&preview

解析器可能看到:

  • tag 有两个值
  • draft 是空字符串
  • preview 是 flag,或是空值

重复键

查询字符串允许重复键:

?tag=frontend&tag=backend

有些框架保留最后一个值,有些会收集成数组,有些要求使用 tag[] 这样的命名约定。

空值与 flag

这些写法在不同系统中不一定等价:

?debug
?debug=
?debug=true

如果服务端把“出现了”视为 true,?debug 可能就够了。如果它期待布尔字符串,就可能必须写 debug=true

顺序

普通过滤场景下,参数顺序通常不重要。但对签名和缓存键来说,顺序可能非常重要。签名 URL 往往要求固定排序和精确的百分号编码。

更安全的心智模型

不要假设解析和重建查询字符串一定无害。你需要明确应用如何处理:

  • 重复键
  • 空字符串
  • 缺失值
  • 数组语法
  • 排序
  • 空格与加号的编码

规则明确后,URL bug 才更容易复现。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览