http請求中get和post方法的區別

1、原理區別

通常咱們在瀏覽器輸入一個網址訪問網站都是GET請求;再FORM表單中,能夠經過設置Method指定提交方式爲GET或者POST提交方式,默認爲GET提交方式。html

HTTP定義了與服務器交互的不一樣方法,其中最基本的四種:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被稱爲安全方法,由於使用GET和HEAD的HTTP請求不會產生什麼動做。不會產生動做意味着GET和HEAD的HTTP請求不會在服務器上產生任何結果。可是安全方法並非什麼動做都不產生,這裏的安全方法僅僅指不會修改信息。面試

根據HTTP規範,POST可能會修改服務器上的資源的請求。好比知乎編寫文章,用戶提交一篇文章或者一個讀者提交評論是經過POST請求來實現的,由於再提交文章或者評論提交後資源(即某個頁面)不一樣了,或者說資源被修改了,這些即是「不安全方法」。ajax

2、使用時最直觀的區別

最直觀的區別就是GET把參數包含在URL中,POST經過request body傳遞參數。chrome

get請求:api

post請求:瀏覽器

3、爲何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左右,這個口說無憑,網上已經有網友進行過測試。markdown

3.get會將數據緩存起來,而post不會


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

4、面試是通常怎麼回答get和post的區別

(1)post更安全(不會做爲url的一部分,不會被緩存、保存在服務器日誌、以及瀏覽器瀏覽記錄中)

(2)post發送的數據更大(get有url長度限制)

(3)post能發送更多的數據類型(get只能發送ASCII字符)

(4)post比get慢

(5)post用於修改和寫入數據,get通常用於搜索排序和篩選之類的操做(淘寶,支付寶的搜索查詢都是get提交),目的是資源的獲取,讀取數據

5、測試get和post請求的工具

get和post請求通常使用的是接口測試工具,接口測試工具我我的通常使用的是:apipost和jmeter。

apipost是一款國產的接口測試工具和接口文檔生成工具,可以知足咱們平常工做當中對於接口測試和接口文檔生成的工做需求。接口文檔還能夠支持多種格式的生成,有在線版、markdown、word版等多種格式的接口文檔。

jmeter能夠進行接口測試和性能測試,可是對於作單純的接口測試jmeter操做起來沒有apipost使用起來方便。jmeter重點在於壓力測試,穩定性測試和負載測試。針對於接口和程序的穩定性設計的一塊以軟件性能爲主接口測試爲輔的接口測試工具。

工具下載地址:

ApiPost - 可直接生成文檔的API調試、管理工具www.apipost.cn圖標

相關文章
相關標籤/搜索