易混淆對照
GET 請求跟 POST 請求差在哪?一個是借書一個是寄包裹
GET 是向伺服器索取資料,不改變伺服器上的任何東西,參數放在網址後面;POST 是把資料打包送過去,會讓伺服器新增或改變內容,參數放在請求主體裡。判斷方式只有一句:這個請求會不會改變伺服器的狀態。
GET 請求跟 POST 請求差在哪?一個是借書一個是寄包裹
串接 API 的時候,文件上寫的第一個字通常就是 GET 或 POST。選錯不只是不專業,還可能把帳號密碼直接暴露在網址列上。
這兩個詞用一個比喻就分得清:GET 是去圖書館借書,POST 是去郵局寄包裹。
你將學到什麼
GET 索取資料
純讀取,不改變伺服器狀態,參數放在網址後面。
POST 送出資料
會寫入或改變狀態,參數放在請求主體裡。
判斷方式
問一句:這個請求會不會改變伺服器上的東西。
定義
GET 請求是向伺服器要資料,但不改變伺服器裡的任何東西。查天氣、讀股價、取得用戶資料、抓公開網頁內容,都屬於這一類。
POST 請求是把資料打包送過去,讓伺服器產生變動或新增內容。新增訂單、上傳檔案、發送訊息、儲存用戶資料,都屬於這一類。
白話比喻
GET 像去圖書館借書。你跟櫃檯說想借這本,對方把書給你,圖書館的藏書內容並沒有因此改變。
POST 像去郵局寄包裹。你把東西交出去,郵局收下並產生一筆新的處理紀錄。兩件事的性質完全不同。
GET 跟 POST 差在哪?
| 比較項目 | GET 索取資料 | POST 送出資料 |
|---|---|---|
| 目的 | 讀取資料 | 寫入、修改、送出資料 |
| 資料位置 | 網址的查詢字串 | 請求主體 Request Body |
| 可見性 | 可見,會出現在網址列 | 不可見,隱藏在主體裡 |
| 長度限制 | 有,受網址長度限制 | 無明確上限,可傳大量資料 |
| 快取 | 可被快取、書籤與分享 | 不會被快取 |
| 安全性 | 較低,容易被記錄或看到 | 較高,適合傳送敏感資料 |
| 可重複性 | 安全,重複執行結果相同 | 可能造成重複寫入 |
對應到 增刪查改 的話,查詢與取得走 GET,新增、更新、刪除、送出走 POST 或其他寫入類的方法。
請求長什麼樣子
GET 的參數直接掛在網址後面,問號之後就是查詢字串。
GET https://api.example.com/search?keyword=AI&page=1&limit=10
POST 的網址很乾淨,資料放在主體裡,不會出現在網址上。
POST https://api.example.com/orders
{
"email": "hello@example.com",
"product": "AI Starter Course",
"amount": 1990
}
這也是為什麼把帳號密碼放在網址參數裡是嚴重的資安錯誤,那串內容會被完整記在好幾個地方。
新手最常犯的錯
- 用 GET 傳敏感資料:帳號、密碼、金鑰出現在網址參數裡。
- 用 GET 做寫入:拿 GET 去建立、更新或刪除資料,違反基本原則。
- 網址塞太長:參數過多導致請求被伺服器拒絕。
- POST 忘了設標頭:沒指定內容型別,伺服器解析不出資料。
- JSON 格式錯誤:少一個逗號或引號,直接換來一個 400 錯誤。
串接任何 API 之前,先確認方法、資料位置與標頭這三件事,可以省掉大半的除錯時間。
常見誤解最常見的誤解是以為 POST 就等於安全。POST 只是不把資料放在 網址 上,內容本身仍是明文傳輸,真正的保護來自加密連線。另一個誤解是以為看不到就沒事,其實用瀏覽器的開發者工具一樣看得到請求內容,該加密的還是要加密。
本文源起本文內容出自酒Ann 的「AI 實戰陪跑班」課程教材,由酒Ann 編寫成彙編條目。想系統性搞懂 AI 名詞,歡迎追蹤 酒Ann 的 Facebook。
延伸學習
常見問答
為什麼帳號密碼不能用 GET 傳?
因為 GET 的參數會出現在網址裡,而網址會被瀏覽器歷史、伺服器日誌與中間的代理層記錄下來,旁邊的人也可能直接看到。敏感資料一律走 POST。
GET 有長度限制嗎?
有。網址長度受瀏覽器與伺服器限制,實務上常見的安全值約在兩千個字元上下,超過就可能被拒絕。要傳大量資料就該用 POST。
重複送出同一個請求會怎樣?
GET 可以安全地重複執行,結果不變。POST 重複送出可能造成重複寫入,例如下了兩筆一樣的訂單,所以表單送出後要做防重複處理。

