常用的 HTTP 請求方法和區(qū)別
最核心和常用的方法有以下幾個:
-
GET
-
用途:請求指定的資源。只用于獲取數(shù)據(jù),不應(yīng)產(chǎn)生任何“副作用”(如修改數(shù)據(jù))。
-
特點:請求的參數(shù)直接附加在 URL 后面(查詢字符串 Query String),有長度限制,且會被瀏覽器歷史記錄保存??梢员痪彺?、收藏為書簽。
-
-
POST
-
用途:提交數(shù)據(jù)給服務(wù)器,通常會導(dǎo)致服務(wù)器狀態(tài)的變化(如創(chuàng)建新資源)。
-
特點:數(shù)據(jù)放在請求體(Request Body)中發(fā)送,沒有長度限制,也更安全(不會顯示在 URL 或瀏覽器歷史中)。通常不會被緩存。
-
-
PUT
-
用途:更新指定資源的所有內(nèi)容。如果資源不存在,可以用 PUT 來創(chuàng)建它。
-
特點:請求體中包含資源完整的更新后版本。是冪等的(多次執(zhí)行同樣的 PUT 操作,結(jié)果都是相同的)。
-
-
DELETE
-
用途:刪除指定的資源。
-
特點:操作是冪等的。
-
-
PATCH
-
用途:部分更新指定的資源。與 PUT 不同,PATCH 只提交需要修改的字段,而不是整個資源。
-
特點:請求體中包含一組指令,描述如何修改資源。不是冪等的(取決于實現(xiàn)方式,但標準定義下,連續(xù)相同的 PATCH 請求可能產(chǎn)生不同結(jié)果)。
-
二、其他不常用但重要的方法
-
HEAD
-
用途:與 GET 方法類似,但服務(wù)器只返回響應(yīng)頭,不返回響應(yīng)體。用于在下載大文件前檢查其元數(shù)據(jù)(如大小、類型)或驗證鏈接有效性。
-
-
OPTIONS
-
用途:詢問服務(wù)器對于某個 URL 支持哪些請求方法。常用于 CORS(跨域資源共享) 預(yù)檢請求中。
-
-
CONNECT
-
用途:建立一個到目標資源的隧道,通常用于通過代理服務(wù)器建立 SSL 加密通道。
-
-
TRACE
-
用途:沿著到目標資源的路徑執(zhí)行一個消息環(huán)回測試,主要用于診斷。由于存在安全風險(如 XST 攻擊),通常被瀏覽器禁用。
-
三、核心區(qū)別對比表
| 方法 | 語義(目的) | 是否冪等 | 是否安全 | 請求體 | 典型應(yīng)用場景 |
|---|---|---|---|---|---|
| GET | 獲取/查詢資源 | 是 | 是 | 通常無 | 訪問網(wǎng)頁、搜索、點擊鏈接 |
| POST | 提交/創(chuàng)建資源 | 否 | 否 | 有 | 用戶登錄、提交表單、上傳文件 |
| PUT | 完整更新/創(chuàng)建資源 | 是 | 否 | 有 | 更新用戶個人資料(提供完整信息) |
| PATCH | 部分更新資源 | 通常否 | 否 | 有 | 只修改用戶的昵稱或狀態(tài) |
| DELETE | 刪除資源 | 是 | 否 | 通常無 | 刪除一篇文章、一個用戶 |
| HEAD | 獲取資源的元信息 | 是 | 是 | 無 | 檢查鏈接是否有效、資源是否更新 |
| OPTIONS | 查詢服務(wù)器支持的方法 | 是 | 是 | 無 | CORS 預(yù)檢請求 |
四、關(guān)鍵概念解釋
1. 安全性(Safe Methods)
一個方法是“安全”的,意味著它只用于讀取信息,而不會修改服務(wù)器上的任何數(shù)據(jù)。GET、HEAD、OPTIONS 被認為是安全的方法。安全的方法可以被緩存、預(yù)加載,而不會產(chǎn)生意外后果。
注意:安全不代表操作沒有副作用(如記錄日志),只是說用戶的意圖不是修改數(shù)據(jù)。
2. 冪等性(Idempotent Methods)
一個方法是“冪等”的,意味著相同的請求被執(zhí)行一次與連續(xù)執(zhí)行多次的效果是一樣的(服務(wù)器狀態(tài)端)。
-
GET:多次獲取同一資源,結(jié)果不變。(冪等)
-
PUT:用同樣的數(shù)據(jù)多次更新同一資源,結(jié)果與一次更新相同。(冪等)
-
DELETE:刪除一個資源后,再次刪除,結(jié)果依然是“已刪除”。(冪等)
-
POST:提交一次訂單會創(chuàng)建一個新訂單,提交兩次會創(chuàng)建兩個訂單。(不冪等)
冪等性對網(wǎng)絡(luò)通信非常重要,當請求失敗時(如超時),客戶端可以安全地重試冪等的請求,而不用擔心產(chǎn)生意外效果。
總結(jié)
-
RESTful API 設(shè)計 的核心就是充分利用這些 HTTP 方法的語義。
-
GET /users- 獲取用戶列表 -
POST /users- 創(chuàng)建一個新用戶 -
GET /users/1- 獲取 ID 為 1 的用戶 -
PUT /users/1- 更新 ID 為 1 的用戶(完整信息) -
PATCH /users/1- 更新 ID 為 1 的用戶(部分信息) -
DELETE /users/1- 刪除 ID 為 1 的用戶
-
理解這些方法的區(qū)別和適用場景,是進行 Web 開發(fā)和 API 設(shè)計的基礎(chǔ)。

浙公網(wǎng)安備 33010602011771號