Http 中的 GET 和 POST 的差別在哪裡?

古古

2025/02/25


在軟體開發中,Http 可以說是大家最常打交道的一個協議了,因此這篇文章就會來介紹一下 Http 中的 GET 和 POST 的差別。

補充:如果大家對於 Http 的其他文章感興趣,也可以參考下列文章的介紹:

什麼是 Http Method? #

所謂的 Http Method,就是在發送一個 API 時,所使用的請求方式。

較常見的 Http Method 有以下四種:

  • GET
  • POST
  • PUT
  • DELETE

其中 GET 和 POST 是使用上最常見的兩種請求方法,所以接下來我們就來比較一下,GET 和 POST 之間的差別在哪裡吧!

GET 介紹 #

GET 是最常使用的 Http Method,大家可以把 GET 想像成是 「明信片」 的概念,也就是 「當你使用 GET 來請求時,你所傳遞的參數就會被別人看見」。

舉例來說,在使用 GET 來請求時,我們就要將請求參數添加在 url 的最後面。因此在下面的例子中,我們就必須要將參數 id=123&name=Judy 添加在 url 的最後面(黃色區塊所示),這樣子才能夠成功傳遞參數給後端。

所以在使用 GET 方法來請求時,所有的請求參數都是「公開的」,因此任何人都能查看參數的值,所以 GET 就像是「明信片」一樣,信中的內容可以被所有人查看。

也因為使用 GET 來請求的所有參數都會被看見,因此如果你的請求參數是比較敏感的資訊(ex: 身分證字號、手機號碼),那就不建議使用 GET 方式來請求,因為這些數據會暴露在 url 中給其他人看到,可能就會導致數據的洩漏。

甚至瀏覽器也會 cache GET 請求的 url,以記錄你曾經訪問過哪些網頁,因此使用 GET 來請求真的是走過路過都會留下痕跡,因此敏感數據絕對不可以使用 GET 來傳遞!!

因此如果想要更隱私的傳遞參數,就可以使用下面的 POST 來實作。

POST 介紹 #

不同於 GET 是公開所有的請求參數,POST 就是相反過來,POST 會隱藏所有的請求參數,因此任何人都沒辦法取得其中的請求參數,所以 POST 也可以說是「信封」的概念,所有的內容都會好好的被封裝在信封內,不會隨意向外部展示。

舉例來說,在使用 POST 來請求時,我們就要改成將請求參數添加在 request body 中,並且通常會使用 JSON 格式來添加數據。因此在下面的例子中,我們就會將 JSON 參數 {"id": 123, "name": "Judy"} 添加在 request body 中(藍色區塊所示),這樣子就能夠隱私的將參數傳遞給後端了。

所以在使用 POST 方法來請求時,所有的請求參數都是「隱私的」,只有收件者(後端)都能查看,其他人是完全看不到的,因此就像是「信封」一樣,信中的內容會對其他人隱藏,只有收件者後端可以查看。

也因為使用 POST 來請求時,所有的參數都會被隱藏起來,不被其他人所看見,因此像是比較敏感的資訊(ex: 身分證字號、手機號碼),就很適合使用 POST 來請求,確保敏感數據不會洩漏。

補充:雖然 POST 是信封的概念,會將所有請求參數隱藏起來,但是駭客仍舊是可以透過其他招數來偷看裡面的內容,因此就算是 POST 來請求還是會有風險,所以仍舊需要做其他的資安加強(ex: Https),才能確保數據不會被駭客給偷走。

GET 和 POST 總結 #

所以總結上面的介紹的話,就可以將 GET 和 POST 做一個比較:

  • GET: 明信片的概念,將參數放在 url 中傳遞,並且所有參數都是「公開的」,任何人都能看見。
  • POST: 信封的概念,將參數放在 request body 中傳遞,並且會將所有參數「隱藏起來」,其他人都看不見。

所以大家以後就可以根據自己目前的 API 的需求,選擇最適合的請求方式了!

補充:GET 和 POST 的更多細節比較 #

如果大家想了解更多關於 GET 和 POST 的技術細節,也可以參考下方的表格整理(資料來源: 前后端数据交互(八)——请求方法 GET 和 POST 区别 )。

GET POST
上一頁、重新整理網頁 無影響 數據會重新被提交
收藏 可收藏至瀏覽器中的「我的最愛」 不可收藏
cache 能被瀏覽器、後端 cache 不能被 cache
歷史 參數會保存在瀏覽器的歷史中 參數不會保存在瀏覽器歷史中
安全性 較差,因為請求參數添加在 URL 中 較安全,因為參數不會被保存在瀏覽器的歷史中、也不會隨著 URL 被記錄在 log 裡
數據長度 有限制,因為 URL 的最大長度是有規範的(最大 2048 個字符) 無限制
使用情境 一般網頁讀取 表單提交、新增數據

結語 #

這篇文章我們先介紹了 GET 和 POST 的用法,並且也比較了他們之間的差別,其實就是一個是「明信片」、另一個是「信封」而已~

如果還想了解更多關於 Http、API 設計的相關知識,也可以參考過往的文章:

如果你對後端技術有興趣的話,也歡迎免費訂閱 《古古的後端筆記》電子報 ,每週二為你送上一篇後端技術分享,那我們就下一篇文章見啦!

補充:我開設的 Spring Boot 零基礎入門 Spring Security 零基礎入門 GitHub 免費架站術 已在 Hahow 平台上架啦!輸入折扣碼「HH202503KU」即可享 85 折優惠。

免費訂閱《古古的後端筆記》電子報

每週二學習後端技術,和 3100 人一起變強💪