跳到主要內容

Get、Post比較


最近同事在問我說,你知道GetPost的區別是什麼嗎?

其實我通常都只用Post,很少用Get,但是我相信到現在還是有很多的開發者對於這個基本的Http Module指令還是不知道要怎麼區別。我們可以用簡單的寄信來比喻。

假定信封的撰寫格式就是 HTTP。我們將信封外的內容稱為 http-header,信封內的書信稱為 message-body,那麼 HTTP Method 就是你要告訴郵差的寄信規則。

Get就好比是明信片,你可以把要傳遞的資訊寫在信封(http-header)上,直接將要傳送的資料以 Query String(一種Key/Vaule的編碼方式)加在我們要寄送的地址(URL)後面,然後交給郵差傳送。

Post就好比是信封內有裝信件的寄送方式(信封有內容物),不但信封可以寫東西,信封內 (message-body) 還可以置入你想要寄送的資料或檔案,我們將寄送地址(URL)寫在信封上,另外將要傳送的資料寫在另一張信紙後,將信紙放到信封裡面,交給郵差傳送。


接著我來介紹一下實際的運作情況:

我們先來看看 GET 怎麼傳送資料的,我們透過下面的Form表單送出Get,結果如下:(你可以開啟Chrome或是Firefox的開發者工具來檢視結果,這裡使用Firefox)


我們將要送出去的資訊(userId=1)放在url,也就是說這樣要送給server端的資訊透過url就可以輕易看出,如果是傳送密碼,絕對不要使用Get



























再來是Post
一樣的,下面有一個簡單的Post Form表單


一樣的使用Firefox的開發者工具,查看送出的資訊
可以看到PostUrl沒有夾帶送出的資訊,我們切換到參數的Tab查看一下











看出個所以然了嗎?原來 POST 是將表單資料放在 message-body 進行傳送,在不偷看封包的情況下似乎安全些。此外在傳送檔案的時候會使用到 multi-part 編碼,將檔案與其他的表單欄位一併放在 message-body 中進行傳送。這就是 GET 與 POST 發送表單的差異。

留言