GET vs POST 完整比較:安全性、用法與選擇指南
2025/04/26 下午08:43
2 views

今天要探討的是網頁中GET和POST的差異。這類文章在網路上已有很多,但為了加深自己的理解並記錄學習過程,我決定寫下這篇文章。
對於網頁設計者來說,無論是前端或後端開發者,都會接觸到GET和POST。後端開發者尤其需要深入了解它們的差異及應用場景。我最初接觸這個問題是在撰寫網路爬蟲時,程式碼中需要選擇使用GET或POST。當時我只知道透過瀏覽器的開發者工具查看網頁元素,就能知道該網頁使用哪種方法,但並不清楚背後的原因。直到開始實際開發網頁後,才對這個問題產生興趣。
HTTP協定的基礎
早期撰寫網頁時,常見的寫法如下:
+form action="xxx.php" method="GET"+
+input type="text" name="id"+
+input type="submit" value="Submit"+
+/form+
後端獲取表單內容時,只需呼叫系統封裝好的方法,例如PHP的$_REQUEST
或JAVA的getParameter()
。
然而,大多數網頁設計者似乎更傾向使用POST方法,認為POST較安全且能傳送更多資料。但POST是否真的比GET更好?讓我們繼續分析。
HTTP方法簡介
HTTP 1.1定義了八種方法:
- GET
- HEAD
- PUT
- OPTIONS
- POST
- TRACE
- DELETE
- CONNECT
本文主要探討GET和POST,其他方法在RESTful架構中可能會用到,有興趣的讀者可以自行研究。
GET與POST的差異
用現實生活中的寄信機制來比喻:
- GET:像明信片,所有資訊都寫在信封(head)上,信封內不能裝信件(body)。價格較便宜,但資訊暴露在外。
- POST:像傳統信件,信封(head)上寫基本資訊,信封內(body)可裝入更多資料或檔案。價格較貴,但資訊較隱密。
GET的運作方式
使用GET時,資料會以Query String(Key/Value編碼)附加在URL後面。例如:
http://xxx.toright.com/?id=010101
瀏覽器會將表單內容轉為Query String並加在URL中傳送。
POST的運作方式
使用POST時,網址列不會變化,表單內容會放在HTTP封包的body中傳送。這種方式在傳送檔案時會使用multi-part編碼,將檔案與其他表單資料一併放入body中。
安全性比較
- GET:資料暴露在URL中,不適合傳送敏感資訊(如密碼)。
- POST:資料藏在封包body中,相對安全,且能傳送更多內容。
總結
GET適合用於簡單的資料取得,而POST適合傳送敏感或大量資料。選擇哪種方法取決於具體需求,而非單純認為POST一定比GET好。