技术与生活 / 一篇记录
查询参数不要靠手工拼接
空格、中文和 & 等字符在 URL 中拥有特定含义。参数值未经编码就拼入字符串,可能变成新的参数,甚至让服务端接收到与用户输入不同的值。
查询参数可能包含空格和保留字符,编码应针对参数值完成。
实际怎么检查
域名 example.com 仅用于说明,核查自己的网站时请替换目标地址。
curl --get --data-urlencode 'q=hello world' https://example.com/
检查实际请求 URL 中空格和特殊符号的表示。
遇到异常再检查什么
用带空格和包含 & 的关键词分别测试,检查服务端实际解析结果。编码针对结构中的值进行,而不是对整个已经组装好的 URL 反复转义。
同一个参数重复出现时,服务端框架可能取首值、末值或列表。客户端与服务端都应遵守同一约定。签名或缓存键依赖查询串时,还需要明确参数顺序与规范化方式。
对已经编码的整段 URL 再编码,可能造成重复转义。
参考:HTTP 文档。