什么是 查询字符串?

查询字符串是 URL 中问号(?)之后的可选查询组件。它的具体语法由应用定义,Web 应用通常把它解释为经过编码的名称和值。

快速了解

全称URL 查询字符串
创建时间1994 年(RFC 1738 - URL 规范)
规范文档官方规范

工作原理

语法与边界

RFC 3986 将查询定义为 ? 与 # 之间的可选 URI 组件,其中可以出现斜杠和问号,数据含义由接收方定义。因此,裸标志、重复名称、空值或非键值对语法都可能是某个 API 的合法设计。

解析与编码

浏览器代码应使用 URL 解析完整地址,再通过 searchParams 访问参数。URLSearchParams 会保留重复条目,并按 application/x-www-form-urlencoded 规则序列化,其中空格编码为 +。不要手工按 & 或 = 拆分,也不要在 append 前重复编码参数值。

安全与缓存

查询数据可能出现在浏览器历史、服务器与代理日志、统计系统、复制链接、缓存,以及策略允许的 Referer 中。不要在查询字符串中放置密码、会话令牌、API 密钥或个人数据。应用还应限制允许的参数和值,并明确参数顺序与追踪字段是否参与缓存键。

主要特点

  • 位于 URL 中 ? 之后、# 之前的可选组件
  • 具体语义由应用定义,不存在通用键值对语法
  • 常见表单编码使用以 & 分隔的名称和值
  • 可以保留重复名称及其插入顺序
  • 根据所在组件采用对应的百分比编码规则
  • 可能暴露在历史、日志、统计、缓存和复制链接中

常见用途

  1. 搜索引擎查询(q=搜索词)
  2. 分页参数(page=2&limit=10)
  3. 数据过滤和排序(?sort=date&order=desc)
  4. 营销分析的 UTM 跟踪代码
  5. 无需会话即可在页面间传递状态

示例

loading...
Loading code...

常见问题

查询字符串的最大长度是多少?

查询字符串没有跨平台统一的最大长度。浏览器、客户端、服务器、代理、CDN 和应用框架都可能设置不同的 URL 或请求目标限制。应根据完整请求链路定义并测试应用上限,而不是依赖 2,048 字符这样的通用规则。

如何处理查询字符串中的特殊字符?

应使用 URL API,而不是手工拼接字符串。URLSearchParams 接收未编码的名称和值,在序列化时执行百分比编码,并按表单编码规则把空格表示为 +。encodeURIComponent() 适合编码单个组件,但不能代替完整参数集合的序列化。

查询字符串和 URL 片段有什么区别?

查询字符串(? 之后)会发送到服务器用于服务器端处理,而 URL 片段(# 之后)仅在客户端处理,不会发送到服务器。片段通常用于页内导航或单页应用程序中的客户端路由。

查询字符串可以包含数组或嵌套对象吗?

应用可以用重复名称、方括号或其他约定表达数组,但 URI 通用语法没有规定统一格式。URLSearchParams.getAll() 可以读取重复名称。客户端与服务端必须共同约定解析方式、顺序、空值和校验规则。

查询字符串对于敏感数据是否安全?

不安全。HTTPS 可以保护 URL 传输过程,但不能阻止查询数据进入浏览器历史、日志、统计、缓存、复制链接或策略允许的 Referer。密码、会话令牌、API 密钥和个人数据不应放入 URL,应按场景使用经过身份验证的请求体或请求头。

相关工具

相关术语

相关文章