Http_GET_POST
post請(qǐng)求中的參數(shù)形式
Angular的ajax功能
AngularJs的ajax的post請(qǐng)求參數(shù)就是提交的json字符串。如:
var data = {'name':'jack'};
$http.post(url,data).success(function(rsp){
// code
})
常見的post請(qǐng)求方式:
(1)、application/x-www-form-urlencoded
這應(yīng)該是最常見的 POST 提交數(shù)據(jù)的方式了。瀏覽器的原生 <form> 表單,如果不設(shè)置 enctype 屬性,那么最終就會(huì)以 application/x-www-form-urlencoded 方式提交數(shù)據(jù):
<form action="form_action.asp" enctype="text/plain">
<p>First name: <input type="text" name="fname" /></p>
<p>Last name: <input type="text" name="lname" /></p>
<input type="submit" value="Submit" />
</form>
此時(shí)可以看到,
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
首先,Content-Type 被指定為 application/x-www-form-urlencoded;其次,提交的數(shù)據(jù)按照 key1=val1&key2=val2 的方式進(jìn)行編碼,key 和 val 都進(jìn)行了 URL 轉(zhuǎn)碼。大部分服務(wù)端語言都對(duì)這種方式很好的支持,常用的如jQuery中的ajax請(qǐng)求,Content-Type 默認(rèn)值都是application/x-www-form-urlencoded;charset=utf-8
(2)、multipart/form-data
這也是常見的post請(qǐng)求方式,一般用來上傳文件,各大服務(wù)器的支持也比較好。所以我們使用表單 上傳文件 時(shí),必須讓<form>表單的enctype屬性值為 multipart/form-data.
- 注意:以上兩種方式:application/x-www-form-urlencoded和multipart/form-data都是瀏覽器原生支持的。
(3)、application/json
application/json作為響應(yīng)頭并不陌生,實(shí)際上,現(xiàn)在很多時(shí)候也把它作為請(qǐng)求頭,用來告訴服務(wù)端消息主體是序列化的JSON字符串,除了低版本的IE,基本都支持。除了低版本的IE都支持JSON.stringify()的方法,服務(wù)端也有處理JSON的函數(shù),使用json不會(huì)有任何麻煩。例如:
//請(qǐng)求數(shù)據(jù)
var data = {name:'jack',sex:'man'};
//請(qǐng)求數(shù)據(jù)序列化處理
JSON.stingify(data);
//結(jié)果:{'name':'jack','sex':'man'};
(4)、text/xml
postman中post請(qǐng)求的form-data、x-www-form-urlencoded、raw、binary的區(qū)別
1、form-data:
等價(jià)于http請(qǐng)求中的multipart/form-data,它會(huì)將表單的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開。既可以上傳鍵值對(duì),也可以上傳文件。當(dāng)上傳的字段是文件時(shí),會(huì)有Content-Type來表名文件類型;content-disposition,用來說明字段的一些信息;
由于有boundary隔離,所以multipart/form-data既可以上傳文件,也可以上傳鍵值對(duì),它采用了鍵值對(duì)的方式,所以可以上傳多個(gè)文件。
2、x-www-form-urlencoded:
等價(jià)于application/x-www-from-urlencoded,會(huì)將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為鍵值對(duì),比如,name=java&age = 23.
3、raw
可以上傳任意格式的文本,可以上傳text、json、xml、html等
4、binary
相當(dāng)于Content-Type:application/octet-stream,從字面意思得知,只可以上傳二進(jìn)制數(shù)據(jù),通常用來上傳文件,由于沒有鍵值,所以,一次只能上傳一個(gè)文件。
multipart/form-data與x-www-form-urlencoded區(qū)別
multipart/form-data:既可以上傳文件等二進(jìn)制數(shù)據(jù),也可以上傳表單鍵值對(duì),只是最后會(huì)轉(zhuǎn)化為一條信息;
x-www-form-urlencoded:只能上傳鍵值對(duì),并且鍵值對(duì)都是間隔分開的。