在軟體開發中,Http 可以說是大家最常打交道的一個協議了,因此這篇文章就會來介紹一下 Http 中的 GET 和 POST 的差別。
補充:如果大家對於 Http 的其他文章感興趣,也可以參考下列文章的介紹:
所謂的 Http Method,就是在發送一個 API 時,所使用的請求方式。
較常見的 Http Method 有以下四種:
其中 GET 和 POST 是使用上最常見的兩種請求方法,所以接下來我們就來比較一下,GET 和 POST 之間的差別在哪裡吧!
GET 是最常使用的 Http Method,大家可以把 GET 想像成是 「明信片」 的概念,也就是 「當你使用 GET 來請求時,你所傳遞的參數就會被別人看見」。
舉例來說,在使用 GET 來請求時,我們就要將請求參數添加在 url 的最後面。因此在下面的例子中,我們就必須要將參數 id=123&name=Judy
添加在 url 的最後面(黃色區塊所示),這樣子才能夠成功傳遞參數給後端。
所以在使用 GET 方法來請求時,所有的請求參數都是「公開的」,因此任何人都能查看參數的值,所以 GET 就像是「明信片」一樣,信中的內容可以被所有人查看。
也因為使用 GET 來請求的所有參數都會被看見,因此如果你的請求參數是比較敏感的資訊(ex: 身分證字號、手機號碼),那就不建議使用 GET 方式來請求,因為這些數據會暴露在 url 中給其他人看到,可能就會導致數據的洩漏。
甚至瀏覽器也會 cache GET 請求的 url,以記錄你曾經訪問過哪些網頁,因此使用 GET 來請求真的是走過路過都會留下痕跡,因此敏感數據絕對不可以使用 GET 來傳遞!!
因此如果想要更隱私的傳遞參數,就可以使用下面的 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 做一個比較:
所以大家以後就可以根據自己目前的 API 的需求,選擇最適合的請求方式了!
如果大家想了解更多關於 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 折優惠。