前面的文章介紹到了關於 HTTP 封包架構,不過對於內部各個元素卻還沒有詳細的探討,那今天就先從 request line 中的 request methods 開始吧!
與 Distributed object(分散式物件)針對特定資源的請求方法不同, 基於 REST 所定義的統一接口,RFC 9110中規範了標準化的請求方法,對於在任何資源使用這些方法都應該代表的是相同的操作,提高了可見性(系統不同部分,例如使用者端與伺服器端在看到請求時可以清楚的理解每個操作代表的行為)以及重用性。
在 RFC9110 中定義了包括 GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS 以及 TRACE 等八種請求的方法,只有 GET、HEAD 是所有通用的伺服器都需要支援的方法,其他都是可選的。
而在 RFC 5789 中定義了 PATCH 方法,與 PUT 直接更新全部資料不同的是,PATCH 只會將請求中的內容進行目標資源的部分更新。
GET:從指定資源取得資料,例如以下請求:GET https://ithelp.ithome.com.tw/articles/000000
代表的是取得這篇文章的所有資料
HEAD:與 GET 相同,只是伺服器不會在回應中傳送內容,也就是說使用 HEAD 回傳的內容只包括 HTTP headers,通常是為了確認是否有指向正確的資源或是透過 headers 中的 last-modified 或是 ETag 進行比對資源是否有更新。例如以下請求:HEAD https://ithelp.ithome.com.tw/articles/000000
用以確認這篇文章的狀態
POST:用來傳送資料到伺服器,讓伺服器根據資源的特定需求進行處理。像是發送GOOGLE表單、發送訊息或是新增一筆數據到資料庫中,例如以下請求:POST https://ithelp.ithome.com.tw/articles
,請求中可能包括以下程式碼
{
"title": "文章標題",
"content": "文章內容",
}
代表新增一個文章,以及標題及內容包括了什麼。
PUT:以請求中包括的內容去取代目標資源中的整體內容,例如以下請求:PUT https://ithelp.ithome.com.tw/articles/000000
,請求中可能包括以下程式碼
{
"title": "新標題",
"content": "新內容",
}
代表更新一個文章,並依照發送的請求將標題改成新標題,內容改成新內容。
DELETE:用來刪除指定的資源,例如以下請求:DELETE https://ithelp.ithome.com.tw/articles/000000
代表的是將指定的這篇編號000000的文章刪除。
CONNECT:CONNECT 請求通常用於建立隧道,例如透過代理進行 SSL 連線。
OPTIONS:透過這個方法,使用者端可以確定與資源或伺服器的能力相關聯的選項或要求,例如以下請求:OPTIONS https://ithelp.ithome.com.tw//articles
伺服器可能回傳以下內容:
HTTP/1.1 200 OK
Allow: GET, POST, OPTIONS
Content-Length: 0
代表這個資源支援的請求方法包括GET、POST以及OPTIONS
TRACE:用來在目標資源上進行回送測試(loop-back test),目的是檢測 HTTP 請求在到達目的地時是否被修改。
PATCH:以請求中包括的內容去取代目標資源中的部分內容,例如以下請求:PATCH https://ithelp.ithome.com.tw/articles/000000
,請求中可能包括以下程式碼
{
"title": "新標題"
}
代表更新一個文章,並依照發送的請求將標題改成新標題,但是內容還是跟原本的一樣。
今天介紹了關於 HTTP 為什麼要標準化 request methods,以及其內容又各自代表了哪些行為,下一篇會進一步介紹關於 safe methods 、 Idempotent methods 以及是否 cacheable 的一些分類!