一、起因
最近在做一個類似接口測試的功能,所以對於get與post請求有了進一步的了解。由於與后端合作的過程中,出現了請求發送成功,但是后端參數接受不到的情況,所以寫下本篇小筆記。
二、正文
前言:
前后端在進行通信的過程中,很常用的就是http網絡請求,而htttp網絡請求最常使用的兩種就是get請求,一般用來獲取數據,post請求,一般用來提交或上傳數據。前后端通信過程中不僅要指定好接口是以何種方式(get/post/delete/put)獲取的,通常還要指定傳輸過程中,數據內容的類型,這就是本文的重點---->Content-Type。
(1)那么Content-Type具體是什么,它有什么作用呢?
Content-type顧名思義:內容的類型,一般指數據以何種方式組織的,前后端一般通信過程中需要指明這個類型,這樣在接受到數據的一方才知道如何解析。舉個簡單的例子:A送給了B一個密碼盒,通過郵政快遞員的方式送到B手中,但是B需要知道密碼盒的密碼才能打開它,才能知道里面裝了什么東西。其中快遞員就相當於http協議,郵政屬於眾多快遞行業的一個,它相當於get/post請求,而密碼屬於Content-Type,它通知我們以何種方式獲取想要的內容。
(2)由於Content-Type包含的內容很多,本文介紹其中一個:application/XXX與get、post的關系
1)一般來說,一個普通的get請求是不需要指定content-type的,因為一個普通的get請求屬於簡單結構,它一般攜帶的數據直接拼接在URL的尾部:
數據就是下面的Query String里面的內容
2)post請求相對於get請求,需要攜帶的數據量大,所以需要設置content-type
post請求體的Content-Type:application/json,其數據在Request Payload里面,告訴服務器此時攜帶的數據格式是json格式的字符串,請使用對應格式解析
post請求體的Content-Type:application/multipart/form-data,其數據在form data里面,,告訴服務器此時攜帶的數據格式是multipart/form-data格式,請使用對應格式解析
由於:application/multipart/form-data即可以上傳表單,也可以上傳文件,
所以實際上傳的時候每部分數據都會加上boundary,
實際上傳過程消息體封裝:
----WebKitFormBoundary '請求體boundary的字符串'
數據1
----WebKitFormBoundary '請求體boundary的字符串'
數據2
......
----WebKitFormBoundary '請求體boundary的字符串'
數據n
3)post請求體的Content-Type:application/x-www-form-urlencoded,其數據雖然也在form data里面,但它的格式是以鍵值對的格式添加到http Body里面的。
告訴服務器此時攜帶的數據格式是x-www-form-urlencoded格式,請使用對應格式解析
x-www-form-urlencoded實際傳輸過程中數據的封裝類似如下:
這篇寫的比我好:https://www.jianshu.com/p/53b5bd0f1d44