Spring REST URL 编码方案: %20 还是 +,哪个更好?

7
我制作了一个Spring REST应用程序,您可以基于POST、PUT、GET、DELETE的HTTP方法执行CRUD操作。我有典型的URI模板。
http://host/root/{id}/{name}/{address} and etc.

我们有一个客户正在访问这个REST服务。显然,他们正在以以下形式发送多词名称和地址的参数:
http://host/root/11/John+Smith/10+Las+Vegas+USA

他们正在使用基于application/x-www-form-urlencoded类型的HTML编码方案。根据维基百科上的文章:

默认使用的编码方式是基于最早版本的URI百分比编码规则,但做了一些修改,如换行符规范化和用“+”代替“%20”来替换空格。- http://en.wikipedia.org/wiki/Percent-encoding

然而,标准的URL编码方案似乎是在URI模板中使用%20来替换空格。那么哪一个才是正确的呢?

我的Spring REST自动将%20转换为空格。它被正确解释了。我正在使用Spring 3.0.4。当我的REST服务遇到+时,它会按原样接受。当然,当我添加验证以排除+时,它确实像预期的那样被排除了。

我是否符合标准,还是存在这样的双重标准?或者客户端使用的是古老的方案?

1个回答

11

重点是application/x-www-form-urlencoded只能在请求参数中使用,而百分号编码也支持路径。

因此,

http://host/root/11/?name=John+Smith&address=10+Las+Vegas+USA

没问题,并且Spring MVC会正确解码它,但是

http://host/root/11/John+Smith/10+Las+Vegas+USA

是错误的,Spring MVC不会对其进行解码,应该使用以下格式:

http://host/root/11/John%20Smith/10%20Las%20Vegas%20USA

谢谢回复。这正是我所想的。在使用Spring REST而不是Spring MVC时,格式“http://host/root/11/John+Smith/10+Las+Vegas+USA”是正确的。 - chris
使用Spring MVC,“http://host/root/11/?name=John+Smith&address=10+Las+Vegas+USA”是正确的格式。在Spring MVC中,“http://host/root/11/John%20Smith/10%20Las%20Vegas%20USA”这种格式也是正确的。 - chris
现在当我告诉另一个程序员我们有一个REST服务时,他为什么会假设使用application/x-www-form-urlencoded编码方案,该方案将空格转换为“+”呢?这不是标准术语吗?还是我错误地认为他们知道它?或者是我在做错误的假设? - chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接