從前面的介紹Url編碼文章中喳资,我們了解了瀏覽器發(fā)起請求的字符處理過程∠鄱辏現(xiàn)在開始介紹tomcat服務(wù)器對鍵值對進(jìn)行Url解碼的過程俊柔。
源碼都在這里:
org.apache.tomcat.util.http.Parameters#processParameters(byte[], int, int, java.nio.charset.Charset)
下面我們分析下其源碼:
我們那 "a=b&%你a=%我" 做例子狭归,瀏覽器發(fā)起請求前會將它url編碼成如下:
a=b&%25%E4%BD%A0a=%25%E6%88%91
1)先看其如何解析出鍵值對 中的“鍵”和“值”。源碼 如下:
tomcat主要是對關(guān)鍵的字符 ‘=’鹦马、‘&’和‘+’ 進(jìn)行分析從而分割出“鍵” 和 “值”胧谈。在這里,我們可以很容易看出荸频,tomcat對‘%’是直接跳過 不處理的菱肖。也就是說,瀏覽器Url編碼后的鍵值對中的 ‘%’ 是不被tomcat處理的旭从。
我們可以往下看:tomcat 在上面過程中提取出? ‘鍵’:“%25%E4%BD%A0a”? 和? ‘值’:“%25%E6%88%91” 后稳强,分別進(jìn)行url解碼。然后存入Map中遇绞。