天天看點

GET和POST的差別——[面試系列]

Http定義了與伺服器互動的不同方法,最基本的方法有4種,分别是GET,POST,PUT,DELETE。

1.url可見性:

get,參數url可見

post,url參數不可見

**get把請求的資料放在url上,即HTTP協定頭上,其格式為:以?分割URL和傳輸資料,參數之間以&相連;post把資料放在HTTP的包體内(requrest body)

2.傳輸資料的大小:

get一般傳輸資料大小不超過2k-4k

post請求傳輸資料的大小根據php.ini 配置檔案設定,也可以無限大

**get送出的資料最大是2k(原則上url長度無限制,那麼get送出的資料也沒有限制咯?限制實際上取決于浏覽器,浏覽器通常都會限制url長度在2K個位元組,即使(大多數)伺服器最多處理64K大小的url,也沒有卵用);

post理論上沒有限制。實際上IIS4中最大量為80KB,IIS5中為100KB

3.資料傳輸上:

get,通過拼接url進行傳遞參數

post,通過body體傳輸參數

**GET産生一個TCP資料包,浏覽器會把http header和data一并發送出去,伺服器響應200(傳回資料);

POST産生兩個TCP資料包,浏覽器先發送header,伺服器響應100 continue,浏覽器再發送data,伺服器響應200 ok(傳回資料)

4.後退頁面的反應:

get請求頁面後退時,不産生影響

post請求頁面後退時,會重新送出請求

**GET在浏覽器回退時是無影響的,POST會再次送出請求

5.緩存性:

get請求是可以緩存的

post請求不可以緩存

**GET請求會被浏覽器主動cache,而POST不會,除非手動設定

6.安全性:

都不安全,原則上post肯定要比get安全,畢竟傳輸參數時url不可見,但也擋不住部分人閑的沒事在那抓包玩,浏覽器還會緩存get請求的資料。安全性個人覺得是沒多大差別的,防君子不防小人就是這個道理。對傳遞的參數進行加密,其實都一樣

7.GET請求隻能進行url編碼,而POST支援多種編碼方式

8.GET請求參數會被完整保留在浏覽器曆史記錄裡,而POST中的參數不會被保留

9.GET隻接受ASCII字元的參數的資料類型,而POST沒有限制

那麼,post那麼好為什麼還用get?get效率高!

想了解的更詳細,可以參考:

https://blog.csdn.net/zzk220106/article/details/78595108/