什么是 HTTP ?
超文本傳輸協(xié)議(HTTP)的設計目的是保證客戶端與服務器之間的通信。
HTTP 的工作方式是客戶端與服務器之間的請求-應答協(xié)議。
web 瀏覽器可能是客戶端,而計算機上的網絡應用程序也可能作為服務器端。
舉例:客戶端(瀏覽器)向服務器提交 HTTP 請求;服務器向客戶端返回響應。響應包含關于請求的狀態(tài)信息以及可能被請求的內容。
兩種 HTTP 請求方法:GET 和 POST
在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。
GET - 從指定的資源請求數(shù)據(jù)。
POST - 向指定的資源提交要被處理的數(shù)據(jù)。
GET 提交參數(shù)一般顯示在 URL 上,POST 通過表單提交不會顯示在 URL 上,POST 更具隱蔽性:

GET 方法
請注意,查詢字符串(名稱/值對)是在 GET 請求的 URL 中發(fā)送的:
/test/demo_form.php?name1=value1&name2=value2
有關 GET 請求的其他一些注釋:
GET 請求可被緩存
GET 請求保留在瀏覽器歷史記錄中
GET 請求可被收藏為書簽
GET 請求不應在處理敏感數(shù)據(jù)時使用
GET 請求有長度限制
GET 請求只應當用于取回數(shù)據(jù)
POST 方法
請注意,查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發(fā)送的:
POST /test/demo_form.php HTTP/1.1
Host: runoob.com
name1=value1&name2=value2
有關 POST 請求的其他一些注釋:
POST 請求不會被緩存
POST 請求不會保留在瀏覽器歷史記錄中
POST 不能被收藏為書簽
POST 請求對數(shù)據(jù)長度沒有要求
比較 GET 與 POST
下面的表格比較了兩種 HTTP 方法:GET 和 POST。
GET |
POST |
|
后退按鈕/刷新 |
無害 |
數(shù)據(jù)會被重新提交(瀏覽器應該告知用戶數(shù)據(jù)會被重新提交)。 |
書簽 |
可收藏為書簽 |
不可收藏為書簽 |
緩存 |
能被緩存 |
不能緩存 |
編碼類型 |
application/x-www-form-urlencoded |
application/x-www-form-urlencoded or multipart/form-data。為二進制數(shù)據(jù)使用多重編碼。 |
歷史 |
參數(shù)保留在瀏覽器歷史中。 |
參數(shù)不會保存在瀏覽器歷史中。 |
對數(shù)據(jù)長度的限制 |
是的。當發(fā)送數(shù)據(jù)時,GET 方法向 URL 添加數(shù)據(jù);URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。 |
無限制。 |
對數(shù)據(jù)類型的限制 |
只允許 ASCII 字符。 |
沒有限制。也允許二進制數(shù)據(jù)。 |
安全性 |
與 POST 相比,GET 的安全性較差,因為所發(fā)送的數(shù)據(jù)是 URL 的一部分。 在發(fā)送密碼或其他敏感信息時絕不要使用 GET ! |
POST 比 GET 更安全,因為參數(shù)不會被保存在瀏覽器歷史或 web 服務器日志中。 |
可見性 |
數(shù)據(jù)在 URL 中對所有人都是可見的。 |
數(shù)據(jù)不會顯示在 URL 中。 |
其他 HTTP 請求方法
下面的表格列出了其他一些 HTTP 請求方法:
方法 |
描述 |
HEAD |
與 GET 相同,但只返回 HTTP 報頭,不返回文檔主體。 |
PUT |
上傳指定的 URI 表示。 |
DELETE |
刪除指定資源。 |
OPTIONS |
返回服務器支持的 HTTP 方法。 |
CONNECT |
把請求連接轉換到透明的 TCP/IP 通道。 |
HTTP 狀態(tài)消息
Px/Em 換算工具
筆記 ::::
Form 中的 get 和 post 方法,在數(shù)據(jù)傳輸過程中分別對應了 HTTP 協(xié)議中的 GET 和 POST 方法。二者主要區(qū)別如下:
1、Get 是用來從服務器上獲得數(shù)據(jù),而 Post 是用來向服務器上傳遞數(shù)據(jù)。
2、Get 將表單中數(shù)據(jù)的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且兩者使用“?”連接,而各個變量之間使用“&”連接;Post 是將表單中的數(shù)據(jù)放在 form 的數(shù)據(jù)體中,按照變量和值相對應的方式,傳遞到 action 所指向 URL。
3、Get 是不安全的,因為在傳輸過程,數(shù)據(jù)被放在請求的 URL 中,而如今現(xiàn)有的很多服務器、代理服務器或者用戶代理都會將請求URL記錄到日志文件中,然后放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數(shù)據(jù),一些系統(tǒng)內部消息將會一同顯示在用戶面前。Post 的所有操作對用戶來說都是不可見的。
4、Get 傳輸?shù)臄?shù)據(jù)量小,這主要是因為受 URL 長度限制;而 Post 可以傳輸大量的數(shù)據(jù),所以在上傳文件只能使用 Post(當然還有一個原因,將在后面的提到)。
5、Get 限制 Form 表單的數(shù)據(jù)集的值必須為 ASCII 字符;而 Post 支持整個 ISO10646 字符集。
6、Get 是 Form 的默認方法。
使用 Post 傳輸?shù)臄?shù)據(jù),可以通過設置編碼的方式正確轉化中文;而 Get 傳輸?shù)臄?shù)據(jù)卻沒有變化。在以后的程序中,我們一定要注意這一點。
一、原理區(qū)別
一般我們在瀏覽器輸入一個網址訪問網站都是GET請求;再FORM表單中,可以通過設置Method指定提交方式為GET或者POST提交方式,默認為GET提交方式。
HTTP定義了與服務器交互的不同方法,其中最基本的四種:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被稱為安全方法,因為使用GET和HEAD的HTTP請求不會產生什么動作。不會產生動作意味著GET和HEAD的HTTP請求不會在服務器上產生任何結果。但是安全方法并不是什么動作都不產生,這里的安全方法僅僅指不會修改信息。
根據(jù)HTTP規(guī)范,POST可能會修改服務器上的資源的請求。比如知乎編寫文章,用戶提交一篇文章或者一個讀者提交評論是通過POST請求來實現(xiàn)的,因為再提交文章或者評論提交后資源(即某個頁面)不同了,或者說資源被修改了,這些便是“不安全方法”。
二、使用時最直觀的區(qū)別
最直觀的區(qū)別就是GET把參數(shù)包含在URL中,POST通過request body傳遞參數(shù)。
get請求:

post請求:

三、為什么get比post更快
1.post請求包含更多的請求頭
因為post需要在請求的body部分包含數(shù)據(jù),所以會多了幾個數(shù)據(jù)描述部分的首部字段(如:content-type),這其實是微乎其微的。
2.最重要的一條,post在真正接收數(shù)據(jù)之前會先將請求頭發(fā)送給服務器進行確認,然后才真正發(fā)送數(shù)據(jù)
post請求的過程:
(1)瀏覽器請求tcp連接(第一次握手)
(2)服務器答應進行tcp連接(第二次握手)
(3)瀏覽器確認,并發(fā)送post請求頭(第三次握手,這個報文比較小,所以http會在此時進行第一次數(shù)據(jù)發(fā)送)
(4)服務器返回100 Continue響應
(5)瀏覽器發(fā)送數(shù)據(jù)
(6)服務器返回200 OK響應
get請求的過程:
(1)瀏覽器請求tcp連接(第一次握手)
(2)服務器答應進行tcp連接(第二次握手)
(3)瀏覽器確認,并發(fā)送get請求頭和數(shù)據(jù)(第三次握手,這個報文比較小,所以http會在此時進行第一次數(shù)據(jù)發(fā)送)
(4)服務器返回200 OK響應
也就是說,目測get的總耗是post的2/3左右,這個口說無憑,網上已經有網友進行過測試。
3.get會將數(shù)據(jù)緩存起來,而post不會
可以做個簡短的測試,使用ajax采用get方式請求靜態(tài)數(shù)據(jù)(比如html頁面,圖片)的時候,如果兩次傳輸?shù)臄?shù)據(jù)相同,第二次以后消耗的時間將會在10ms以內(chrome測試),而post每次消耗的時間都差不多。經測試,chrome和firefox下如果檢測到get請求的是靜態(tài)資源,則會緩存,如果是數(shù)據(jù),則不會緩存,但是IE什么都會緩存起來,當然,應該沒有人用post去獲取靜態(tài)數(shù)據(jù)吧,反正我是沒見過。
四、面試是一般怎么回答get和post的區(qū)別
(1)post更安全(不會作為url的一部分,不會被緩存、保存在服務器日志、以及瀏覽器瀏覽記錄中)
(2)post發(fā)送的數(shù)據(jù)更大(get有url長度限制)
(3)post能發(fā)送更多的數(shù)據(jù)類型(get只能發(fā)送ASCII字符)
(4)post比get慢
(5)post用于修改和寫入數(shù)據(jù),get一般用于搜索排序和篩選之類的操作(淘寶,支付寶的搜索查詢都是get提交),目的是資源的獲取,讀取數(shù)據(jù)
五、測試get和post請求的工具
get和post請求一般使用的是接口測試工具,接口測試工具我個人一般使用的是:apipost和jmeter。
apipost是一款國產的接口測試工具和接口文檔生成工具,能夠滿足我們日常工作當中對于接口測試和接口文檔生成的工作需求。接口文檔還可以支持多種格式的生成,有在線版、markdown、word版等多種格式的接口文檔。文章來源:http://www.zghlxwxcb.cn/news/detail-769775.html

jmeter可以進行接口測試和性能測試,但是對于做單純的接口測試jmeter操作起來沒有apipost使用起來方便。jmeter重點在于壓力測試,穩(wěn)定性測試和負載測試。針對于接口和程序的穩(wěn)定性設計的一塊以軟件性能為主接口測試為輔的接口測試工具。文章來源地址http://www.zghlxwxcb.cn/news/detail-769775.html

到了這里,關于http請求中get和post方法的區(qū)別的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!