URL参数名称中使用字符“|”是否合法?及指定URL有效性与“|”字符使用合理性咨询
关于URL中“|”字符的合法性问题
1. “|”是否可作为合法的URL参数名称字符?
根据URL的官方规范(RFC 3986),“|”并不属于允许直接在URL中使用的合法字符。URL的字符体系分为三类:
- 非保留字符:
A-Za-z0-9-._~,这类字符可以直接在URL的任何部分(包括查询参数)使用,无需编码。 - 保留字符:
:/?#[]@!$&'()*+,;=,这类字符在URL中有特定语义(比如?分隔路径和查询参数,&分隔多个参数),如果要把它们当作普通字符使用,必须进行百分号编码。 - 未定义字符:除了上述两类之外的所有字符,“|”就属于这一类。规范明确要求这类字符必须经过百分号编码(转换为
%7C)后才能出现在URL中。
2. 你提供的URL是否合法?
你给出的URL:
https://sales-stage-api.techsg.cloud/requests/statistics?"meetingTime"|date:timeZone={"start":"2022-02-01 00:00:00 +07:00","end":"2022-02-28 23:59:00 +07:00"}
虽然它在当前环境中能正常运行,但严格来说是不符合URL规范的。问题出在参数名称里直接使用了未编码的“|”字符。
很多现代浏览器、后端框架或者代理服务器会做宽松处理,兼容这类不符合规范的写法,但这并不代表它是合规的。这种写法存在潜在风险:在某些严格遵循规范的环境(比如老旧的HTTP客户端、特定的代理服务、或者严格的参数解析库)中,可能会被错误解析——比如把“|”当作参数分隔符,或者直接拒绝该请求,导致服务调用失败。
合规的修正方案
把URL中的“|”替换为它的百分号编码形式%7C,修正后的URL如下:
https://sales-stage-api.techsg.cloud/requests/statistics?"meetingTime"%7Cdate:timeZone={"start":"2022-02-01 00:00:00 +07:00","end":"2022-02-28 23:59:00 +07:00"}
内容的提问来源于stack exchange,提问作者Khang Hồ
相关产品推荐
相关产品推荐

