1. 程式人生 > >一分鐘理解post和put(安全與冪等角度)

一分鐘理解post和put(安全與冪等角度)

HTTP方法的安全性和冪等性

可以認為安全的方法都是隻讀的方法(GET, HEAD, OPTIONS),不會改變資源狀態,顯然,這三個方法也是冪等的。

DELETE方法的語義表示刪除伺服器上的一個資源,第一次刪除成功後該資源就不存在了,資源狀態改變了,所以DELETE方法不具備安全特性。然而HTTP協議規定DELETE方法是冪等的,每次刪除該資源都要返回狀態碼200 OK,伺服器端要實現冪等的DELETE方法,必須記錄所有已刪除資源的元資料(Metadata),否則,第二次刪除後返回的響應碼就會類似404 Not Found了。

PUT和POST方法語義中都有修改資源狀態的意思,因此都不是安全的。但是PUT方法是冪等的,POST方法不是冪等的,這麼設計的理由是:

HTTP協議規定,POST方法修改資源狀態時,URL指示的是該資源的父級資源,待修改資源的ID資訊在請求體中攜帶。而PUT方法修改資源狀態時,URL直接指示待修改資源。因此,同樣是建立資源,重複提交POST請求可能產生兩個不同的資源,而重複提交PUT請求只會對其URL中指定的資源起作用,也就是隻會建立一個資源。