IPv6在请求参数中编码

时间:2013-01-28 08:07:15

标签: java rest jersey decode ipv6

我的REST资源(使用Jersey)使用QueryParam接收IPv6地址。

当资源中收到的地址值,其某些字符被编码时,不知道使用哪种算法。

例如,地址:[fe80 :: bce8:a33e:2c56:d48a%13]
到达这样:
在调试中它看起来像[fe80 :: bce8:a33e:2c56:d48a \ u00]
但是当它被剔除时:[fe80 :: bce8:a33e:2c56:d48a]

我知道'\ u00'被翻译为空格,但为什么会这样?我怎么能克服这个?有没有办法解码它?

由于

3 个答案:

答案 0 :(得分:1)

根据RFC2396

  Because the percent "%" character always has the reserved purpose of
  being the escape indicator, it must be escaped as "%25" in order to
  be used as data within a URI.

泽西岛不可能理解这是否是一个保留字符。所以,在你的情况下,我相信你应该逃避查询参数中的保留字符,然后它应该按预期工作:

[fe80::bce8:a33e:2c56:d48a%2513]

答案 1 :(得分:0)

IPv6地址由八个4位十六进制字符和七个:分隔符

组成

因此您需要将十六进制字符独立转换为整数。

答案 2 :(得分:0)

其中一个原因似乎是您使用链接本地地址(以fe80开头:)。因为每个链接都有这些地址,所以地址需要包含的哪个链接的规范。那是你看到的%13部分。如果字符串被解析为URL编码字符串,则%13将成为DC3控制代码(具有十六进制数0x13)。

我不知道QueryParam,但这似乎是个bug。 IP地址不是URL编码的,所以它不应该尝试解码它们......