概念
GET和POST是什麼?
HTTP協議中的兩種發送請求的方法。
HTTP是什麼?
HTTP是基於TCP/IP的關於數據如何在萬維網中如何通信的協議。
HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,都是TCP鏈接。GET和POST能做的事情是一樣一樣的。如果給GET加上request body,活着給POST帶上url參數,技術上是完全行的通的。
區別
1.Get是不安全的,因爲在傳輸過程,數據被放在請求的URL中;Post的所有操作對用戶來說都是不可見的,通過request body傳遞參數。
2.Get傳送的數據量較小,這主要是因爲受URL長度限制;Post傳送的數據量較大,一般被默認爲不受限制。
3.Get限制Form表單的數據集的值必須爲ASCII字符;而Post支持整個ISO10646字符集。
4.Get執行效率卻比Post方法好。Get是form提交的默認方法。
5.GET產生一個TCP數據包;POST產生兩個TCP數據包。
6.對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);
而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
7.GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
8.GET請求只能進行url編碼,而POST支持多種編碼方式。
9.GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
注意
1.在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。
2.在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有很好的體驗效果
3.並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。
如果大家對java架構相關感興趣,可以關注下面公衆號,會持續更新java基礎面試題, netty, spring boot,spring cloud等系列文章,一系列乾貨隨時送達, 超神之路從此展開, BTAJ不再是夢想!