以下只是简单总结,并不完善但是非常有用。
url组成: 之前对url的组成很模糊,一直都笼统称为url,但其实在对url编解码过程中对每部分的编解码区别挺大的。
对url中的URI,QueryString以及请求体的编解码都是不一样的。
因为浏览器对每部分的编码不一样,所以才有服务器对每部分的解码方式不一样。(不同的浏览器对每部分的编码方式可能有不一样)
以Tomcat为例,URL中解码:
URL中的URI部分的解码:在server.xml中的<Connector URIEncoding="UTF-8">中指定,若未指定,默认采用ISO-8859-1 解码。
一、QueryString解码:(GET)
二、请求体解码:(POST)
三、请求头解码
划重点:请求头不能设置编解码格式,含非ASCII字符,解码定会乱码。
所以我们在文件下载的时候,在响应头设置文件名称时为将文件指定为ISO8859-1的编码格式,这是浏览器默认解码格式。
参考:《深入分析Java Web技术内幕》