首先,先說一下,關於爲什麼必須將url地址,去編碼後,再發送,是由於相關的協議規範:RFC 1738,定義了url地址中不能包含除了0-9的數字,大小寫字母(a-zA-Z),短橫線’-‘html
以外的字母。換句話說,若是其中包括了不少特殊符合,好比$-_.+!*'(),那麼都要儘可能編碼。安全
而關於爲什麼要這麼定義,通過一番簡單調查,基本的理由是:編碼
1.自己html代碼中,不少特殊字符,就有其自己的特殊含義,好比’#’,就適用於定位(html anchor),因此,這類字符,自己有特殊含義的字符,不能直接用於發送,因此須要編碼;url
2.若是其中自己就包含一些,非打印的控制字符,那麼沒法正常打印顯示,因此必須被編碼才能傳輸。(控制字符)htm
3.還有些保留字符(&,=,:),不安全字符(<,>,#),因此須要對url地址編碼。ci
4.另外,還有一些,最容易想到的,好比空格,若是出如今一個url地址中間,咱們就很難判斷,空格先後的內容,是不是屬於整個的單一的url的,因此,對於空格這樣的特殊字符,確定是須要編碼的。get