http GET 和 POST 請求的優缺點、區別

原文鏈接:https://blog.csdn.net/sanhye/article/details/83531919

Get和Post一般的區別:

(1)post更安全(不會作爲url的一部分,不會被緩存、保存在服務器日誌、以及瀏覽器瀏覽記錄中) 
(2)post發送的數據更大(get有url長度限制) 
(3)post能發送更多的數據類型(get只能發送ASCII字符) 
(4)post比get慢 
(5)post用於修改和寫入數據,get一般用於搜索排序和篩選之類的操作(淘寶,支付寶的搜索查詢都是get提交),目的是資源的獲取,讀取數據 
雖然在開發中經常用get或者post請求,但是由於我們資歷經驗的欠缺,或許就重來沒有深究過什麼場合用get請求,什麼場合用post請求,我相信不止我一個人當看到第4,5條的時候,就會明白爲什麼面試官對我們的回答不滿意,也明白了自己對get或post用法理解的欠缺,那麼get比post更快,究竟快多少呢?表現在那些方面?

一、爲什麼get比post更快

1.post請求包含更多的請求頭 
因爲post需要在請求的body部分包含數據,所以會多了幾個數據描述部分的首部字段(如:content-type),這其實是微乎其微的。

2.最重要的一條,post在真正接收數據之前會先將請求頭髮送給服務器進行確認,然後才真正發送數據 
post請求的過程: 
(1)瀏覽器請求tcp連接(第一次握手) 
(2)服務器答應進行tcp連接(第二次握手) 
(3)瀏覽器確認,併發送post請求頭(第三次握手,這個報文比較小,所以http會在此時進行第一次數據發送) 
(4)服務器返回100 Continue響應 
(5)瀏覽器發送數據 
(6)服務器返回200 OK響應 
get請求的過程: 
(1)瀏覽器請求tcp連接(第一次握手) 
(2)服務器答應進行tcp連接(第二次握手) 
(3)瀏覽器確認,併發送get請求頭和數據(第三次握手,這個報文比較小,所以http會在此時進行第一次數據發送) 
(4)服務器返回200 OK響應 
也就是說,目測get的總耗是post的2/3左右,這個口說無憑,網上已經有網友進行過測試。

3.get會將數據緩存起來,而post不會 
可以做個簡短的測試,使用ajax採用get方式請求靜態數據(比如html頁面,圖片)的時候,如果兩次傳輸的數據相同,第二次以後消耗的時間將會在10ms以內(chrome測試),而post每次消耗的時間都差不多。經測試,chrome和firefox下如果檢測到get請求的是靜態資源,則會緩存,如果是數據,則不會緩存,但是IE什麼都會緩存起來,當然,應該沒有人用post去獲取靜態數據吧,反正我是沒見過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章