區別:
參數:get通過url進行傳遞;post放在request body中
長度:get請求在url的長度是有限制的;而post沒有(其實這個限制是來自瀏覽器和web服務器對url的限制,並不是http協議)
安全:get由於直接將參數暴露在url中所以不能用來傳遞敏感信息,而post就不會有這個問題
編碼:get只能進行url編碼,而post支持多種編碼合適
速度:由於get的data都在url里面所以速度較快(如果在網絡環境好的情況下和這個可以差距忽略,反而在網絡環境差的情況下兩次包的tpc在驗證數據的完整性上,有更大的優點 )
緩存:get請求可以被瀏覽器緩存,post請求不會被瀏覽器緩存
數據包:get由於data都在url里面,瀏覽器會把http的header和data一並發送,所以只殘生一個數據包服務器響應200;post,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響200 ok(不過這不是post的必然行為是部分瀏覽器或框架的請求方式)
本質:本質上來說get和post並沒有差別,底層都是tcp/ip協議,但是由於http的規定和瀏覽器、服務器的限制,導致他們在應用過程中出現了不用的形式
擴展:
tcp/ip協議:是用於因特網的通訊協議-是供已連接因特網的計算機進行通信的協議
tcp:(傳輸控制協議)-應用於程序之間的通信
ip:(網際協議)-計算機之間的通信
http: 超文本傳輸協議-是用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議;是基於tcp/ip通信協議來傳遞數據
關系:
tcp就想汽車,我們用tcp來運輸數據,他很可靠,從來不是發生少件的現象
但是如果都是一樣的汽車那就會一團亂,為了避免混亂
所以交通規則誕生了他就是http,他為tcp提供了服務類別(pot、get、put、dalete。。。。)
但是,我們只看到HTTP對GET和POST參數的傳送渠道(url還是requrest body)提出了要求。“標准答案”里關於參數大小的限制又是從哪來的呢?
那就是萬維網中另一個重要的角色:運輸公司(瀏覽器)
理論上你可以在車頂無限推貨物(url中無限加參數),但是數據量太大會給瀏覽器和服務器造成很大的負擔。
所以業界有不成文的規定,大多數瀏覽器會限制url長度在2k字節,而大多數服務器最多處理64k大小的url