HTTP有哪些保證冪等性和安全性的方法? - mscharhag

banq發表於2020-02-15

冪等性和安全性是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是冪等的,但並不安全。
請注意,冪等性並不意味著伺服器必須對每個請求以相同的方式進行響應。

例如,假設我們要透過ID使用DELETE請求刪除專案:

DELETE /projects/123 HTTP/1.1


作為響應,我們可能會收到HTTP 200狀態程式碼,指示該專案已成功刪除。如果我們再次傳送此DELETE請求,則可能會收到HTTP 404作為響應,因為該專案已被刪除。第二個請求沒有更改伺服器狀態,因此即使我們得到不同的響應,DELETE操作也是冪等的。
冪等性是API的一項積極功能,因為它可以使API更具容錯性。假設客戶端出現問題,並且請求被多次傳送。只要使用冪等操作,就不會在伺服器端造成任何問題。

相關文章