开发实战指南
查询参数解析:重复键、空值与 fragment
保留重复参数,区分查询数据和 HTTP 请求不会发送的 fragment。
先解析 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。