HTTP協議中PUT和POST使用區別

2021-08-07 08:55:39 字數 1344 閱讀 6099

**

有的觀點認為,應該用post來建立乙個資源,用put來更新乙個資源;有的觀點認為,應該用post來更新乙個資源,用put來建立乙個資源;還有的觀點認為可以用put和post中任何乙個來做建立或者更新乙個資源。這些觀點都只看到了風格,爭論起來也只是爭論哪種風格更好,其實,用put還是post,不是看這是建立還是更新資源的動作,這不是風格的問題,而是語義的問題。

根據定義,我個人覺得put應該是用於更新檔案,因為put(put(state)) = put(state);post應該用於建立檔案,因為post(post(state)) != post(state)

在http中,put被定義為idempotent的方法,post則不是,這是乙個很重要的區別

property

of"idempotence"

inthat (aside from

error

or expiration issues) the side-effects of n > 0 identical requests is

the same as

for a single request.」

上面的話就是說,如果乙個方法重複執行多次,產生的效果是一樣的,那就是idempotent的

舉乙個簡單的例子,假如有乙個部落格系統提供乙個web api,模式是這樣http://superblogging/blogs/post/,很簡單,將替換為我們的blog名字,往這個uri傳送乙個http put或者post請求,http的body部分就是博文,這是乙個很簡單的rest api例子。

我們應該用put方法還是post方法?

取決於這個rest服務的行為是否是idempotent的,假如我們傳送兩個http://superblogging/blogs/post/sample請求,伺服器端是什麼樣的行為?

如果產生了兩個部落格帖子,那就說明這個服務不是idempotent的,因為多次使用產生了***了嘛;

如果後乙個請求把第乙個請求覆蓋掉了,那這個服務就是idempotent的。前一種情況,應該使用post方法,後一種情況,應該使用put方法。

即如果要產生兩個帖子即用post,如果要在原有的帖子上更新即用put。

也許你會覺得這個兩個方法的差別沒什麼大不了的,用錯了也不會有什麼問題,但是你的服務一放到internet上,如果不遵從http協議的規範,就可能給自己帶來麻煩。

比如,沒準google crawler也會訪問你的服務,如果讓乙個不是indempotent的服務可以用indempotent的方法訪問,那麼你伺服器的狀態可能就會被crawler修改,這是不應該發生的。

HTTP協議中PUT和POST使用區別

這倆個方法初看一下好像都是更新資源,但是有本質上的區別,那就是語義。在http中,put被定義為冪等 idempotent 的方法,post則不是,這是乙個很重要的區別。首先解釋冪等,冪等是數學的乙個用語,對於單個輸入或者無輸入的運算方法,如果每次都是同樣的結果,則稱其是冪等的。也就是說,如果乙個網...

HTTP協議中PUT和POST使用區別

這倆個方法初看一下好像都是更新資源,但是有本質上的區別,那就是語義。在http中,put被定義為冪等 idempotent 的方法,post則不是,這是乙個很重要的區別。首先解釋冪等,冪等是數學的乙個用語,對於單個輸入或者無輸入的運算方法,如果每次都是同樣的結果,則稱其是冪等的。也就是說,如果乙個網...

HTTP中Put和Post的區別

解釋http中put和post。它們有什麼區別,哪個使用時更加安全?put和post都是瀏覽器向網頁伺服器提交資料的方法。put把要提交的資料編碼在url中,比如 中就編碼了鍵值對 key1,value1 和key2,value2。受限於url的長度限制,put方法能傳輸的資料有限 不同瀏覽器對ur...