認識 HTTP 超文本傳輸協定(二):請求方法

前言

本文為〈HTTP - MDN Web docs〉的學習筆記。

請求方法

HTTP 定義了一組請求方法,以指示要對給定資源執行的所需操作。儘管它們也可以是名詞,但這些請求方法有時也稱為 HTTP 動詞。每個方法都實現了不同的語義,一些方法則共享了一些共有的功能:例如,請求方法可以是安全的、冪等的或可快取的。

GET

GET 方法請求指定資源的表示形式。使用 GET 請求應僅檢索資料。

特性 是否
要求有 body 不是
成功的回應有 body
安全的
冪等的
可快取的
允許 HTML 格式

語法:

1
GET /index.html

HEAD 方法請求的響應與 GET 請求的響應相同,但不是響應主體。

特性 是否
要求有 body 不是
成功的回應有 body 不是
安全的
冪等的
可快取的
允許 HTML 格式 不是

語法:

1
HEAD /index.html

POST

POST 方法用於將實體提交給指定的資源,通常會導致狀態更改或對服務器產生副作用。

特性 是否
要求有 body
成功的回應有 body
安全的 不是
冪等的 不是
可快取的 僅包括最新訊息
允許 HTML 格式

語法:

1
POST /test

PUT

PUT 方法用來創建新資源,或用來替換目標資源。

特性 是否
要求有 body
成功的回應有 body 不是
安全的 不是
冪等的
可快取的 不是
允許 HTML 格式 不是

語法:

1
PUT /new.html HTTP / 1.1

DELETE

DELETE 方法刪除指定的資源。

特性 是否
要求有 body 或許
成功的回應有 body 或許
安全的 不是
冪等的
可快取的 不是
允許 HTML 格式 不是

語法:

1
DELETE /file.html HTTP/1.1

CONNECT

CONNECT 方法與請求的資源進行雙向通訊,它可以用來打開通道。

特性 是否
要求有 body 不是
成功的回應有 body
安全的 不是
冪等的 不是
可快取的 不是
允許 HTML 格式 不是
1
CONNECT www.example.com:443 HTTP/1.1

OPTIONS

OPTIONS 方法用於描述目標資源的通訊選項。

特性 是否
要求有 body 不是
成功的回應有 body
安全的
冪等的
可快取的 不是
允許 HTML 格式 不是
1
2
OPTIONS /index.html HTTP/1.1
OPTIONS * HTTP/1.1

TRACE

TRACE 方法沿到目標資源的路徑執行消息環回測試。

特性 是否
要求有 body 不是
成功的回應有 body 不是
安全的 不是
冪等的
可快取的 不是
允許 HTML 格式 不是
1
TRACE /index.html

PATCH

PATCH 方法用於對資源進行部分修改。

特性 是否
要求有 body
成功的回應有 body
安全的 不是
冪等的 不是
可快取的 不是
允許 HTML 格式 不是
1
PATCH /file.txt HTTP/1.1

術語

安全的

如果 HTTP 方法不會更改服務器的狀態,則它是安全的。換句話說,如果方法只是讀取,則它是安全的,像是:GET、HEAD 和 OPTIONS 方法。

  • GET 方法是安全的。
1
GET /pageX.html HTTP/1.1
  • POST 方法是不安全的,可能會更改伺服器狀態:
1
POST /pageX.html HTTP/1.1
  • DELETE 方法是不安全的,可能會更改伺服器狀態:
1
DELETE /idX/delete HTTP/1.1

冪等的

如果可以在使服務器處於相同狀態的情況下,連續執行一次或多次相同的請求而產生相同的效果,則此 HTTP 方法稱作是「冪等的」(idempotence)。換句話說,冪等方法不應有任何副作用(保留統計訊息除外)。冪等的方法有:GET、HEAD、PUT 和 DELETE 方法等。

  • GET 方法是冪等的。連續調用多次,客戶端將獲得相同的結果:
1
2
3
4
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
  • POST 方法則不是冪等的;如果多次調用,它將添加幾行:
1
2
3
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1 -> Adds a 2nd row
POST /add_row HTTP/1.1 -> Adds a 3rd row
  • DELETE 方法是冪等的。連續調用多次,客戶端將獲得相同的結果,即使返回的狀態代碼可能不一樣:
1
2
3
DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1 -> Returns 404

可快取的

可快取的響應是可以快取的 HTTP 響應,將其存儲以供以後檢索和使用,從而將新請求保存到服務器。請求中使用的方法本身是可快取的,即 GET 或 HEAD 方法。而一些響應的狀態碼也可以被快取,像是 200 等。

技術指標