form表單中的get與post有什麼差別?

重點整理引用自 Soul & Shell Blog

表單<form>~</form>中的屬性 action 是資料接收端的路徑,屬性 method 則是規定用於發送 form-data 的 HTTP 方法,可分為〝get〞與〝post〞兩種:

<form id="myform" action="form_action.asp" method="post">
<p>First name: <input type="text" name="fname" /></p>
<p>Last name: <input type="text" name="lname" /></p>
<input type="submit" value="Submit" />
</form>

舉個例子來說,假如 HTTP 是我們生活中寄信的機制,HTTP Method 就是寄信的方式。我們姑且把信封外的內容稱為 http-header,信封內的書信稱為message-body,來看看這兩種方式有什麼差別:

get:類似明信片一樣,我們可以把要傳遞的資訊直接寫在(http-header)上面,郵資比較便宜,但是信件的安全度比較低,容易被其他人看到內容。

使用 get 時,瀏覽器會自動將表單要傳送的資料轉為 Query String 加在我們要寄送的地址(URL)後面進行連線,所以在表單提交(Submit)後,我們可以看到瀏覽器的網址改變,例如〝https://medium.com/?id=010101〞

HTTP GET Method 是不允許在 message-body 中傳遞資料的,因為 get就是要「取得」資料的意思。但是從瀏覽器的網址就可以看見表單要傳送的資料,若是要傳送密碼豈不是一覽無遺……所以會有資安方面的顧慮。


post:類似信封+信紙一樣,我們必須把寄送地址(URL)寫在信封上,另外將要傳送的資料寫在信紙(message-body)上,將信紙放入信封中,再交給郵差寄送,雖然郵資比較貴,但是信件的安全度比較高。

用 post 這個方法,資料傳送後瀏覽器的網址沒有變化。因為 post 是將表單資料放在 message-body 中進行傳送,在不偷看封包的情況下,是相對比較安全的作法。所以許多網頁設計師對於表單中 method 的用法才會有這些印象:〝post 可以傳送比較多的資料〞、〝表單傳送檔案的時候要使用 post〞、〝post 比 get 安全〞。

以上內容,整理引用自:
SJ撰寫的淺談 HTTP Method:表單中的 GET 與 POST 有什麼差別?
若有不適當之處請告知,馬上將文章刪除,謝謝