http query parameter的编码问题(备忘录)

来源:互联网 发布:软件系统测试关键技术 编辑:程序博客网 时间:2024/06/14 15:05

http://localhost:8080/ClientHello?sessionId=+++

http://localhost:8080/ClientHello?sessionId=%2B%2B%2B

【sessionId=+++】这部分属于URI中的query部分,会被编码(转义),但是下面这几个特殊字符是不会被转义的。



当使用tomcat作为Http服务器时,query parameter这部分会被解码,因此如果传递了+,则会被解码成sp(空格),这是不符合预期的,也是很奇怪的。浏览器不会编码"+"号,URLDecoder会把+号解码成sp(因为URLEncoder会把空格编码成+号),这就存在了一种不一致行为,为了消除这种不一致,可以使用encodeURIComponent把+编码成%2B,URLDecoder会把%2B解码成+号。

encodeURIComponent并不会把所有字符都编码成%HEX HEX的形式,当某个字符X不被编码时,要保证URLDecoder也不会解码X,否则又会出现类似+号的不一致行为。


参考文献:

1.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

 
原创粉丝点击