1. 程式人生 > >為什麼url需要對空格進行編碼

為什麼url需要對空格進行編碼

最近在學習sql注入,正好碰到關於url,GET等問題,比如在sql注入中,#註釋這個辦法只適用於POST傳送的引數,在GET中不適用,因為GET屬於URL的一部分,而URL中特定字元是有特殊用途的,正如一位知乎上的朋友講的,在URL中#是定義錨點的,是專門用來給瀏覽器看的。

隨後又瞭解到URL原來是需要對特定字元以後的內容進行擷取,留在客戶端,比如#;此外還會對空格,漢字等非assic字元進行編碼,我抓了一個包發現送往服務端的資料確實全是assic字元(隨機拿幾個字元和資料包的raw data做一一對應,是assic的編碼),於是我上網搜了一下為什麼URL的內容需要做編碼?找了一下發現大多都是說URL怎麼編碼以及答非所問的情況。

於是我自己思考了一下,認為一個原始的http協議的包(就是一段緩衝區char* buffer)先要做報頭,host,accept,cookie等的劃分,而劃分的依據就是空格(0x20),因此在每一部分的內容中不允許出現空格,以免影響伺服器的劃分工作。

至於漢字等字元為什麼也要轉碼成一種既不是utf-8,unicode,又不是gbk的編碼,我想是因為這幾種編碼誰都不能保證一個漢字的raw data裡面不包含 0x20這個東西,一旦包含了,就會對伺服器造成影響。所以漢字也要編碼,並且我感覺編碼方式比較像 base64這種編碼方式。

說起base64編碼,我想起自己大一的時候寫一個通訊軟體,在處理傳送的資料上總是由於 換行符,回車符等特殊字元造成各種字串截斷的bug,後來我想了一個辦法就是 資料裡面的換行符不是 0x10嗎?那我就把它轉化成“10”這麼個東西,雖然佔用的空間變成了兩個位元組,但是至少穩定性極佳,加上沒有效能等要求,當時想不失為一個偷懶的想法。

再後來知道了有base64這種編碼,於是對其印象很深刻。

以上屬於自己的個人臆測,如有錯誤,歡迎指正,歡迎轉發,註明原連結。