6
A
回答
13
POST和PUT都可用於在不同情況下創建和更新操作。那麼PUT和POST之間的區別究竟是什麼? 簡而言之:當且僅當您知道資源將存活的URL以及資源的全部內容時,才使用PUT。否則,使用POST。
POST是一個令人難以置信的一般動詞。因爲它既不保證安全性也不具有冪等性,並且它在RFC中有相對寬鬆的描述,所以你可以將它用於任何事情。事實上,你可以讓所有的請求POST請求,因爲POST幾乎沒有承諾;它可以表現得像一個GET,一個PUT或一個DELETE,如果它想的話。它還可以做一些其他動詞無法做到的事情 - 它可以在與HTTP請求中的URL不同的URL上創建新資源;它可以在不改變整個事物的情況下修改資源的一部分(儘管提議但未廣泛接受的PATCH方法可以做類似的事情)。
PUT是一個更嚴格的動詞。它需要一個完整的資源並將其存儲在給定的URL中。如果之前有資源,它就會被替換;如果不是,則創建一個新的。這些屬性支持idempotence,這是一個天真的創建或更新操作可能不會。我懷疑這可能是爲什麼PUT被定義的原因;它是一種冪等操作,允許客戶端向服務器發送信息。
參考文獻:
- RFC 2616 - HTTP 1.1
- RFC 5789 - 用於HTTP PATCH方法
- Martin Fowler的,理查森成熟度模型
1
您可以發送請求主體以同樣的方式,它只是你的應用程序代碼的處理不同...
的POST
動詞傳統上用於創建資源
的PUT
動詞傳統上用於更新資源
2
從HTTP的角度來看,請求格式是相同的。
0
PUT
上傳的新資源服務器。如果資源已經存在並且不同,它將被替換;如果它不存在,則創建它。
POST
觸發服務器上的操作。它有副作用,可用於觸發訂單,修改數據庫,在論壇發佈消息或其他操作。
相關問題
- 1. Angular $ http發送選項而不是PUT(不是POST)
- 2. 使用Http Post發送狀態數據是否是好習慣?
- 3. 離子$ HTTP POST不發送數據
- 4. angularjs $ http post不發送數據
- 5. AngularJS HTTP POST不發送數據
- 6. 角4:HTTP不發送POST數據
- 7. Http Post不發佈數據
- 8. 發送和使用HTTP POST
- 9. $ .ajax POST工作和$ .ajax PUT不會在向服務器發送數據時
- 10. 在HTTP POST中發送參數
- 11. 發送HTTP POST數據與Objective-C
- 12. 如何發送數據與$ http post
- 13. Angular2 http put方法不發送formData
- 14. 在打破REST的POST/PUT請求中是否將屬性作爲JSON發送?
- 15. POST數據不發送
- 16. Jquery .post不發送數據
- 17. IE不發送POST數據
- 18. HTTP PUT文件和數據
- 19. AngularJS $ http.put PUT方法不發送數據
- 20. Android http發送不發送數據
- 21. 如何在PUT方法中發送原始JSON數據在Guzzle POST Body中?
- 22. 發送數據從Javafx發送到HTTP POST請求
- 23. 發送相同的數據來查看POST和GET在node.js/Express.js
- 24. Angular2 Http不發送帶有表單數據的POST請求
- 25. 如何使用sim908 GPRS和Http POST發送數據?
- 26. jquery $ .post不發送發佈數據
- 27. 發送的HTTP PUT請求中的一個整數的Java
- 28. 用Java中的數據發送HTTP POST請求
- 29. Spring通過HTTP POST發送JSON數據不起作用
- 30. Angularjs $ http服務POST,PUT和GET
有趣的是,我讀過POST用於更新和PUT用於創建,例如在這裏接受的答案http://stackoverflow.com/questions/630453/put-vs-post-in-rest – DexCurl 2011-12-14 17:12:36
這實際上是一個常規問題而不是標準問題,我不會依賴於在這裏找到一個「接受」的答案作爲** any **的具體證據...... http://stackoverflow.com/a/2447740/555384。 ..如果我是你,我會細讀一些受歡迎的Restful apis,看看他們是如何做到的......我認爲你會發現這個答案是最常被接受的。 – jondavidjohn 2011-12-14 17:23:02