我需要发送一个get请求,其中url的最后一部分是json值。我已将以下{"period":"600s"}
编码为在多个不同的网站上使用,但是在:
未解码的情况下,它们都会得到相同的结果。
已编码的网址:stickiness=%7B%22period%22%3A%22600s%22%7D
。
那么如何编码:
?
答案 0 :(得分:1)
%3A
是:
的编码。 URI中保留:
以指定端口号(例如google.com:443
手动指定使用端口443
,即默认的HTTPS
端口。如果您想在URI中加入:
,则必须为precent-sign-encoded,这就是%3A
。它无法在网址栏中解码,因为它会违反:
字符的保留用途。
答案 1 :(得分:1)
冒号字符未在浏览器中解码,因为它属于the reserved characters,其他地方的URL已经具有明确含义 - 在这种情况下,将协议与主机名和主机名后的端口分开。
相关标准为RFC 1738,第3页:
许多URL方案为特殊含义保留某些字符: 它们在URL的特定于方案的部分中的出现有一个 指定的语义。如果对应于八位字节的字符是 在方案中保留,八位字节必须被编码。那些角色 ”;”, “/”,“?”,“:”,“@”,“=”和“&”是可能的人物 保留给计划中的特殊含义。没有其他角色可以 在计划中保留。
通常,当八位字节为时,URL具有相同的解释 由字符表示并在编码时。但事实并非如此 保留字符为true:编码为a保留的字符 特定方案可能会改变URL的语义。
因此,只有字母数字,特殊字符“$ -_。+!*'(),”和 可以使用用于其保留目的的保留字符 在URL中未编码。