为什么url编码不是由RFC3986指定的spring和apache

时间:2017-01-06 16:23:06

标签: java spring encoding urlencode apache-commons

今天早些时候,我向this question询问了网址编码问题。

我试图使用spring的UriComponentBuilder编码url查询参数,然后我也尝试了apache commons的UriBuilder。两者都在查询参数中将加号(+)编码为%2B,但根据the specification RFC3986(第3.4节),查询参数中允许使用加号。不允许仅限:

  

*(pchar /“/”/“?”)

所以这将是一个有效的网址

http://www.example.com?foo=bar+baz

但是两个库都转换了+:

http://www.example.com?foo=bar%2Bbaz

之前我从未听说过,并假设+实际上是编码的whitespace字符。此外,this answer指出至少春天遵循该规范。

谁是对的?规范,还是spring和apache?或者我只是误解了什么?或者那些库是哪个规范?

旁注

我甚至认为不允许并且不解析编码的字符服务器端是不好的做法,你同意吗?

0 个答案:

没有答案