幂等性和安全性是HTTP方法的屬性。 HTTP RFC定義了這些屬性,并告訴我們哪些HTTP方法是安全且幂等的。 伺服器應用程式應確定正确執行安全和幂等的語義,如用戶端期望的那樣。
安全的HTTP方法
如果HTTP方法不更改伺服器狀态,則認為它們是安全的。 是以,安全方法隻能用于隻讀操作。 HTTP RFC定義了以下安全方法:GET,HEAD,OPTIONS和TRACE。
實際上,通常不可能以不改變任何伺服器狀态的方式來實作安全方法。
例如,GET請求可能會建立日志或稽核消息,更新統計值或觸發伺服器上的緩存重新整理。
RFC在這裡告訴我們:
自然地,不可能確定伺服器不會由于執行GET請求而産生副作用; 實際上,一些動态資源認為該功能。 這裡的重要差別是使用者沒有要求副作用,是以不能對它們負責。
幂等HTTP方法
幂等意味着多個相同的請求将具有相同的結果。 是以,發送請求一次還是多次都沒有關系。 以下HTTP方法是幂等的:GET,HEAD,OPTIONS,TRACE,PUT和DELETE。 所有安全的HTTP方法都是幂等的,但PUT和DELETE是幂等的,但并不安全。
請注意,幂等性并不意味着伺服器必須對每個請求以相同的方式進行響應。
例如,假設我們要使用DELETE請求通過ID删除項目:
DELETE /projects/ 123 HTTP/ 1.1
作為響應,我們可能會收到HTTP 200狀态代碼,訓示該項目已成功删除。 如果我們再次發送此DELETE請求,則可能會收到HTTP 404作為響應,因為該項目已被删除。 第二個請求沒有更改伺服器狀态,是以即使我們得到不同的響應,DELETE操作也是幂等的。
幂等性是API的一項積極功能,因為它可以使API更具容錯性。 假設用戶端存在問題,并且請求被多次發送。 隻要使用幂等操作,就不會在伺服器端造成任何問題。
HTTP方法概述
下表總結了哪些HTTP方法是安全的和幂等的:
HTTP方法 | 安全 | 等幂的 |
得到 | 是 | 是 |
頭 | 是 | 是 |
選項 | 是 | 是 |
跟蹤 | 是 | 是 |
放 | 沒有 | 是 |
删除 | 沒有 | 是 |
開機自檢 | 沒有 | 沒有 |
更新檔 | 沒有 | 沒有 |
翻譯自: https://www.javacodegeeks.com/2020/02/http-methods-idempotency-and-safety.html