← 全部文章

技术与生活 / 一篇记录

查询参数不要靠手工拼接

空格、中文和 & 等字符在 URL 中拥有特定含义。参数值未经编码就拼入字符串,可能变成新的参数,甚至让服务端接收到与用户输入不同的值。

查询参数可能包含空格和保留字符,编码应针对参数值完成。

实际怎么检查

域名 example.com 仅用于说明,核查自己的网站时请替换目标地址。

curl --get --data-urlencode 'q=hello world' https://example.com/

检查实际请求 URL 中空格和特殊符号的表示。

遇到异常再检查什么

用带空格和包含 & 的关键词分别测试,检查服务端实际解析结果。编码针对结构中的值进行,而不是对整个已经组装好的 URL 反复转义。

同一个参数重复出现时,服务端框架可能取首值、末值或列表。客户端与服务端都应遵守同一约定。签名或缓存键依赖查询串时,还需要明确参数顺序与规范化方式。

对已经编码的整段 URL 再编码,可能造成重复转义。

参考:HTTP 文档。

搜索文章

输入关键词,找回一篇记录。