对查询参数和重定向 URI 进行 URL 编码

安全地编码 redirect_uri 值、回调 URL 和嵌套参数,避免认证或 API 请求继续出错。

本指南聚焦实战场景:重定向流程、查询参数、scope 值,以及编码完整 URL 与编码单个组件之间的区别。

适用场景
回调 URL、嵌套查询字符串或 redirect_uri 值不断被拒绝或截断。
首先检查什么
检查你编码的是整个 URL 还是单个参数组件,这个差异通常就是重定向出错的原因。
常见陷阱
空格、加号、@、/ 和 ? 在日志里看起来无害,但如果原样复制,常常会导致请求出错。
示例工作流
编码 redirect_uri 值
嵌套的回调 URL 应作为参数值进行编码,而不是原样粘贴到外层请求中。
redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Fnext%3D%252Fsettings
编码 scope 字符串
OAuth scope 值常包含空格,必须进行百分号编码才能可靠传输。
scope=read%3Ausers%20write%3Ausers
处理搜索词或邮箱值
像 +、@、/ 和 ? 这样的字符,通常说明你正在编码正确的组件。
email=dev%2Balerts%40example.com
让回调地址保持可读
在线工具允许你一次只编码或解码一个值,这在重定向日志难以阅读时很有用。
https://app.example.com/callback?next=/settings
encodeURI 与 encodeURIComponent

如果要保留完整 URL 的结构,请使用 encodeURI。若要编码单个参数值,如 redirect_uri、state 或搜索查询,请使用 encodeURIComponent。

  • 大多数认证和 API 问题都来自本该使用 encodeURIComponent,却误保留了保留字符。
编码具体值,而不是盲目编码整个请求

已签名请求、OAuth 重定向和嵌套 URL 都依赖在正确的层级对正确的组件进行编码。拿不准时,先把该值单独拿出来测试。

  • 如果问题其实出在请求体而不是查询字符串,请转到 JSON 格式化。