HTTP 方法詳解,http方法詳解
一、基礎篇
所謂HTTP要求方法就是你提前告訴伺服器你要進行什麼類型的操作,如同你吃飯前先點菜,告訴餐廳要給你準備做什麼樣的菜。
一共有8個類型的方法
GET |
HEAD |
POST |
PUT |
DELETE |
OPTIONS |
TRACE |
擴充方法 |
- GET
顧名思義,好比小孩子問媽媽要糖果一般,伸手問伺服器拿東西。伺服器在存在該資源並允許的情況下返回資源,否則返回其他,比如不存在則是404 NOT FOUND
- HEAD
HEAD頭部,http報文中有一項叫做頭部資訊,與GET方法類似,同樣是問伺服器要資源,但是與GET不同的是,http在響應中只會返回實體的首部資訊,而不是完完全全地返回實體的主體部分。
因此,這就好比部隊打仗前的哨兵探路一般。
HEAD通常用於打探情況,使用HEAD——
- 你可以在不擷取資源的情況下很快地就能瞭解到資源的情況,比如其類型,其檔案大小,
- 也可以通過響應碼查看是否存在該資源,
- 也可以檢測資源是否被修改了。
- PUT
與GET恰好相反,收穫前得先付出。 PUT方法就用於向伺服器提交東西,上傳東西,寫入修改東西。
- POST
POST用於向伺服器提供表單資料。
- DELETE
就是刪除,請求伺服器刪除請求URL中指定的資源。
- OPTIONS
選項,因此該方法就是請求伺服器告知用戶端其所能支援的方法。由於後面HTTP提供給開發人員一個擴充方法的權利。並且這個七個方法中不是每一個方法伺服器都會支援實現,取決於伺服器開發人員。
好比於點菜前我們需要問餐廳要的餐單,看看其提供什麼菜色。
一般來說,伺服器會返回其所支援的方法。
- TRACE
TRACE為追溯,就是追根溯源的意思。
我們點餐時可能是以口頭方式告訴服務員,然後服務員告訴大廚,這傳遞的過程中可能由於口誤或者聽錯等原因修改了傳遞的資訊。
同理,當用戶端向伺服器發起一個請求時,這個請求可能需要穿過防火牆,代理,網關等中間節點才能到達伺服器,這些中間節點有權修改原始的HTTP請求,那麼HTTP允許用戶端發起這樣一個請求,讓伺服器返回一條最終達到伺服器的請求給用戶端,好讓用戶端知道自己的原始請求是否被修改了,修改了哪些地方。
(8)擴充方法
因為上述七個方法儘管已經滿足基本要求了,但是仍然會有特殊情況所不能滿足。因此擴充方法就是在HTTP1.1規範中沒有定義的方法,因此HTTP允許開發人員自訂一些市實現方法。比如LOCK,MOVE ,COPY 等等。
二、番外篇-關於 PUT 與 POST的區別
在HTTP官方定義中
The POST method is used to request thatthe origin server accept the entity enclosed in the request as a newsubordinate of the resource identified by the Request-URI in the Request-Line
POST方法是用在請求中的,起原始伺服器把請求中的實體內容作為請求URI在請求行所指定的資源的下屬資源。
The PUT method requests that the enclosedentity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosedentity SHOULD be considered as a modified version of the one residing on theorigin server. If the Request-URI does not point to an existing resource, and that URI iscapable of being defined as a new resource by the requesting user agent, theorigin server can create the resource with that URI."
PUT方法則是要求被封裝的實體是儲存在請求URI指定的地方。
如果請求的URI指向已經存在的資源,那麼封裝的實體應該被視為駐留在原始伺服器上實體的修改後的版本。
而在stackOverFlow上的討論也趨向於這麼一個觀點:
PUT是等冪的,所謂等冪就是重複操作是否會導致一樣的結果,在下面英文中進行了舉例,比如x = 5就是等冪的,你執行多少次都是沒關係,結果一樣,但是 x++就不是,執行每次的結果都不一樣。PUT就是等冪的。
PUT implies putting a resource -completely replacing whatever is available at the given URL with a differentthing. By definition, a PUT is idempotent. Do it as many times as you like, andthe result is the same. x=5 isidempotent. You can PUT a resource whether it previously exists, or not (eg, toCreate, or to Update)!
POST updates a resource, adds asubsidiary resource, or causes a change. A POST is not idempotent, in the waythat x++ is not idempotent.
註:出處是http://stackoverflow.com/questions/630453/put-vs-post-in-rest
個人理解:PUT和 POST都可以用來建立伺服器上的資源,並進行修改,但是如何選擇使用,取決於使用POST的時候,重複請求會不會造成不同的結果,如果是那麼就必須使用PUT。如果不是,那麼用PUT和 POST都沒關係咯。