开发实战指南

查询参数解析:重复键、空值与 fragment

保留重复参数,区分查询数据和 HTTP 请求不会发送的 fragment。

Nav Tools ·

先解析 URL 再看参数

查询从 ? 后开始并在 # 前结束,fragment 由客户端处理,不作为 HTTP 请求目标发送。

先用 URL 解析器定位组成,再检查参数,不能在完整 URL 上随意按 ? 或 & 切分。

https://example.com/search?tag=go&tag=json&q=#results
Query: tag=go&tag=json&q=
Fragment: results

重复键可能是有效表达

查询允许同一键出现多次,URLSearchParams 的 get 返回一个值,getAll 返回全部。

直接转普通对象可能丢掉重复,接口应明确接收重复键、逗号串还是 JSON 编码数组。

new URLSearchParams("tag=go&tag=json").getAll("tag")
→ ["go","json"]

空值不一定等于缺失

常见查询解析下 q 和 q= 都产生空值,没有 q 则是缺失,业务可以为它们规定不同含义。

应通过 has 单独检查存在性,空值若表示清空筛选,不应被默认值覆盖。

用原始值构造参数

传给 URLSearchParams 的名称和值应未编码,由它序列化编码,字面加号和 & 需要这样处理。

用 Unicode、重复键和空值核对往返,协议提供更合适请求头时避免把认证数据放在 URL。

参考资料

← 开发实战指南