從 HTTP 報文來看:
GET請求方式將請求信息放在 URL 后面,請求信息和 URL 之間以 ?隔開,請求信息的格式為鍵值對,這種請求方式將請求信息直接暴露在 URL 中,安全性比較低。另外從報文結構上來看,由于請求信息放置在 URL 中,因此請求報文中不需要報文體。
而POST 請求方式將請求信息放置在報文體中,想要獲得請求信息必須先解析報文,因此安全性較 GET 方式要高一些(但事實上,要獲得報文體中的信息也是很容易的,因此安全性上兩者并沒有太多的區別,具體解決傳輸過程中的安全性問題還要靠 HTTPS),此外 POST 的請求報文中含有報文體。
由于 GET 中的請求信息放置在 URL 中,因此是有長度限制的,因為 URL 本身是有長度限制的。POST 中的請求信息是放置在報文體中的,因此對數據長度理論上是沒有限制的。
從數據庫層面來看:
冪等性的定義:對數據庫的一次操作和多次操作獲得的結果是一致的,則認為符合冪等性。
安全性的定義:對數據庫的操作沒有改變數據庫中的數據,則認為符合安全性。
GET 請求方式符合冪等性和安全性,GET請求方式是做查詢操作,因此不會改變數據庫中原有的數據,認為符合安全性,事實上 GET 請求可能會出現多次請求的結果不一致(例如在兩次請求中間對數據庫中的數據做了更改),從這來說不符合冪等性的定義,但是因為 GET 請求只是查詢數據庫,不會對數據庫做任何更改,因此也可以認為是冪等的。
POST 請求方式是既不冪等也不安全,首先 POST 請求方式是往數據庫提交數據的,因此會改變數據庫中的數據。其次,POST 請求方式每次獲得的結果都可能不一樣,因為 POST 請求是作用在上一級的 URL 上的,每一次請求都會添加一份新的資源,或者修改資源信息。