重新了解 HTTP method 之一

最近剛好在社群討論到 HTTP method,發現自己對這個東西不是很懂,所以跟大家一起翻了文件,並以自己的理解記了這份筆記。

歷史

HTTP 最早的版本是在 1991 年定義,當時的文件只有提到 GET method。型式跟現在差異不大,放在最一開始的開頭:

GET /users

後來 1992 年還有一份文件,上面定義非常多 method,包括了現在常見的如 PUTDELETE 等,還有少見的 CHECKOUTCHECKIN 等。當時各家廠商都在定義自家的 HTTP 是如何操作的,因此會造成不同的廠商之間無法順利溝通的問題。後來 1996 年 IETF 組織參考了各家的實作,重新定義了一份 HTTP/1.0 文件,並發布成 RFC 1945

RFC 1945 的 method 定義 就簡化非常多,只有 GET、HEAD 和 POST。但它的分類是 Informational,只是單純的記錄資訊,因此 IETF 小組也提醒必須要儘早定出標準。

直到 1999 生出了目前廣泛使用的標準 RFC 2616,它定義了現在大家討論 RESTful API 所熟知的那幾個操作方法(未來才會繼續看)。而在 2014 年,IETF 小組又把這份文件重新整理過,並分成六個文件發布,HTTP method 的部分在 RFC 7231 裡。

從文件的 4.1 Overview 可以得知,HTTP method 的意義與物件導向的 method 意義是類似的,是透過語義化的描述來操作物件,如 GET 是取得資料的意思。裡面也有提到 HTTP method 設計的目的,是要做為分散式系統(distributed systems)的通用介面。統一化的介面設計,在網路系統上會有更好的可見性和重用性(參考 REST)。

下一集待續…