陈中正的网络日志

HTTP400错误和URLEncode

今天被URLEncode坑得报了一整天的HTTP400错误,特此总结一下。

1. URLEncode

1.1. 什么是URLEncode

百分号编码(Percent-encoding), 也称作URL编码(URL encoding), 是一种URL编码机制。

常用的以下几种编码规则:

  • 把URL中下图中上一行的字符(保留字符)转换为对应的下一行字符(非保留字符):

  • 把URL中的『%』转换为『%25』。 也因而对同一串URL多次进行URL编码会导致其长度会越来越长。如,

http://www.163.com -> http%3a%2f%2fwww.163.com -> http%253a%252f%252fwww.163.com -> ...

我们可以在这个网站进行测试。

  • 二进制数据每8个bite进行URL编码。 如字节值0F编码为「%0F」。

1.2. 什么时候会进行URLEncode

  • 在『Chrome的地址栏』和输入URL后,他会对URL中『http://』 之后的部分进行隐式的URL编码;
  • 在『Postman的地址栏』也会对URL中『http://』 之后的部分进行隐式的URL编码;『Postman的Params栏』则会全部进行URL编码;

这些过程都是透明的。另外,如果在地址栏中输入的URL是自行编码过的URL,它们就不会在对你的URL进行隐式的URL编码,非常的智能!

1.3. 什么时候会进行URLDecode

  • Java容器(如Tomcat、Resin等)在收到客户端的消息时,会隐式的进行一次URLDecode,这个过程也是透明的;
  • 可以在程序中手动进行字符串URLDecode。

2. HTTP 400错误

2.1. 什么是HTTP 400错误

400 Bad Request
由于包含语法错误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。

2.2. 什么时候会出现400错误

我们上面讲了URLEncode,当一个URL进行多次URLEncode时,Tomcat只URLDecode一次,这时就会返回400错误。这也是今天遇到的问题。

3. 参考

百分号编码

HTTP状态码

Categories:  Web相关 

« 安卓手机控制Mac上的网易云音乐 在Tomcat中指定Web应用的Context »