POST和PUT HTTP請求之間有什麼區別?


Answers

只有語義。

HTTP PUT應該接受請求的主體,然後將其存儲在由URI標識的資源中。

HTTP POST更通用。 它應該在服務器上啟動一個動作。 該操作可以將請求主體存儲在由URI標識的資源中,或者可以是不同的URI,也可以是不同的操作。

PUT 就像文件上傳。 放入URI會影響該URI。 對URI的POST可能會有任何影響。

Question

他們似乎都在向身體內的服務器發送數據,那麼是什麼使他們與眾不同呢?




據我所知,PUT主要用於更新記錄。

  1. POST - 創建文檔或任何其他資源

  2. PUT - 更新創建的文檔或任何其他資源。

但要明確該PUT通常會將現有記錄“替換”它是否存在,並創建它是否存在。




請參閱:http: http://zacharyvoase.com/2009/07/03/http-post-put-diff/

最近Web開發人員普遍認為POST被用來創建資源,PUT被用來更新/更改資源,這讓我非常惱火。

如果您看一下RFC 2616(“超文本傳輸協議--HTTP / 1.1”) 第9.6節 (“PUT”)的第55頁,您將看到PUT的實際用途:

PUT方法要求封閉實體存儲在提供的Request-URI下。

還有一個方便的段落來解釋POST和PUT之間的區別:

POST和PUT請求之間的根本區別反映在請求URI的不同含義中。 POST請求中的URI標識將處理封閉實體的資源。 該資源可能是數據接受過程,其他協議的入口或接受註釋的獨立實體。 相比之下,PUT請求中的URI標識請求附帶的實體 - 用戶代理知道URI的目標是什麼,服務器不能嘗試將請求應用到其他資源。

它沒有提到更新/創建之間的區別,因為這不是它的意思。 這是關於這個區別的:

obj.set_attribute(value) # A POST request.

和這個:

obj.attribute = value # A PUT request.

所以請停止這種流行的誤解。 閱讀您的RFC。




其他人已經發布了很好的答案,我只是想補充說明大多數語言,框架和使用情況,你會比POST更頻繁地處理POST。 PUT,DELETE等基本上都是瑣碎問題。




1)GET: - 當客戶端在Web服務器上請求資源時使用。

2)HEAD:當客戶端請求關於資源的一些信息但不請求資源本身時使用。

3)POST: - 當客戶端向服務器發送信息或數據時使用 - 例如,填寫在線表單(即向Web服務器發送大量複雜數據)。

4)PUT: - 當客戶端在請求URL下發送替換文檔或上傳新文檔到Web服務器時使用。

5)刪除: - 當客戶端試圖從Web服務器上刪除一個由請求URL標識的文檔時使用。

6)TRACE:當客戶端詢問可用的代理服務器或中間服務器更改請求以宣布自己時使用。

7)選項: - 當客戶想要確定其他可用的方法來檢索或處理Web服務器上的文檔時使用。

8)連接: - 當客戶端想要與遠程主機建立透明連接時使用,通常通過HTTP代理來實現SSL加密通信(HTTPS)。




PUTPOST之間的區別在於:

當客戶負責決定新資源應該具有哪個URI時,客戶端使用PUT

當服務器負責決定新資源應該具有哪個URI時,客戶端使用POST