天天看點

HTTP方法:幂等性和安全性

幂等性和安全性是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