get和post的區別?

第一次在掘金上寫東西,萌新表示如今瑟瑟發抖,哪裏說得不對還望各位大佬糾正┓( ´∀` )┏web

最直觀的就是語義上的區別瀏覽器

  • get用來獲取數據,post用來提交數據
  • get參數有長度限制(受限於url長度,具體的數值取決於瀏覽器和服務器的限制,最長2048字節),而post無限制。
  • get請求的數據會附加在url之 ,以 " ? "分割url和傳輸數據,多個參數用 "&"鏈接,而post請求會把請求的數據放在http請求體中。
  • get是明文傳輸,post是放在請求體中,可是開發者能夠經過抓包工具看到,也至關因而明文的。
  • get請求會保存在瀏覽器歷史記錄中,還可能保存在web服務器的日誌中

從當前角度來看,post相對get比較安全,至少請求的數據在url上不可見。然而真的只有這些嗎???

錯,錯了?????

  • 那到底安全仍是不安全呢?????

這個時候你首先得肯定是用什麼來定義安全(舉個栗子)緩存

  • 你讓我爸爸媽媽叔叔阿姨去看這個url,你以爲安全嗎?
  • 你讓一個初級測試工程師去測試這個接口,你以爲安全不?
  • 你讓安全測試工程師去看看get請求呢? 因此人羣不一樣,安全的定義就不同
  • 真相

首先get和post在本質上都是tcp連接,但因爲http協議和瀏覽器或者服務器的限制,從而使它們在應用過程當中產生了差異,可是它們中還有一個較大的區別:get在請求時發送一個數據包,會將header和data一塊兒發送過去,而post會產生兩個數據包先發送header,服務器返回100,而後在發送data,服務器返回200安全

因此當你一層一層的把get和post剖析到底,你會發現他們的本質就是tcp鏈接,沒有啥區別,只是因爲http協議規定和瀏覽器或者服務器的限制,致使他們在應用過程當中體現形式不一樣。服務器

RFC是什麼鬼?

前段時間在看到有人在談論這個問題的時候有人扯出了RFC,那麼什麼是RFC呢。tcp

  • Request For Comments(RFC),是一系列以編號排定的文件。文件收集了有關互聯網相關信息,以及UNIX和互聯網社區的軟件文件。(來自百度百科)

這樣說吧!RFC就是互聯網的規範,咱們一般所說的協議就是RFC的方式存在,http/1.1規範中RFC7231中涉及到了幾個http的方法,其中定義了幾個性質:工具

1.safe(安全)post

這裏的安全和一般所理解的安全意義不一樣,就比如若是一個請求的語義本質上就是獲取數據(只讀),那麼這個請求就是安全的。客戶端向服務器發起的請求若是沒有引發服務器端任何的狀態變化,那麼他就是安全的而post請求來提交數據必然會是服務器發生相應的變化。從這個維度來看,get請求相對服務器而言,是安全的,post則不安全的。測試

ldempotend(冪等)url

冪等通俗的來說就是指同一個請求執行屢次和僅執行一次的效果徹底相等。這裏來扯出冪等主要是爲了處理同一個請求重複發送的狀況,假如在請求響應以前失去鏈接,若是這個請求時冪等的,那麼就能夠放心的重發一次請求。因此能夠得出get請求時冪等的,能夠重複發送請求,post請求時不冪等的,重複請求可能會發生沒法預知的後果。

cacheable(可緩存性)

顧名思義,就是一個請求是否能夠被緩存,絕大多數部分,post都是不可緩存的(某些瀏覽器可能支持post緩存),但get是能夠緩存的。

勉強理解一下大概就是:

get是請求獲取指定資源,get方法時安全、冪等、可緩存的,get方法的報文主體沒有任何語義。

post是根據報文主體來對指定資源作出處理,post不安全,不冪等,不可緩存(大部分狀況下)。

好了,今天就先扯這麼多,有大佬發現不對請幫我糾正糾正,蟹蟹蟹蟹啦!先溜!

相關文章
相關標籤/搜索