Table of Contents
18.7 GET 请求加密
路径参数不加密,原 query 参数不再出现在 URL 中,而是作为 data 对象加密。最终 URL 只能存在一个 e 参数:
原始:GET /tieup/api/v1/artist/fans/10001?page=1&page_size=20
载荷 data:{"page":"1","page_size":"20"}
发送:GET /tieup/api/v1/artist/fans/10001?e=<Base64URL信封>
典型参数映射:
| 原业务语义 | 加密前 data |
|---|---|
| 无 query | {} |
?page=1 |
{"page":"1"} |
?page=1&page_size=20 |
{"page":"1","page_size":"20"} |
| 数组参数 | {"ids":["10001","10002"]} |
| 空字符串 | {"keyword":""} |
| 中文 | {"keyword":"中文歌手"} |
| 布尔/数字业务值 | 按原接口 JSON 语义传 {"enabled":true,"level":2} |
URL query 原始值通常是字符串,因此分页等既有 query 推荐继续使用字符串。不要先拼接 a=1&b=2 再整体加密,应从 HTTP 客户端的 query 参数对象直接构造 JSON 对象;数组按 JSON 数组放入 data。
即使没有业务 query,强制模式也必须发送加密 data={} 得到的 ?e=...,用于时间戳和防重放证明。e 与其他明文参数同时存在或 e 为空都会返回 4606;客户端不得构造重复的 e 参数。
服务端解密成功后执行 withQueryParams(data),Controller 继续使用 query()、input()、all(),无需感知密文。