四種常見的post請求中的參數形式

post請求中的參數形式

1、初識post請求實例

一、Angular的ajax功能

AngularJs的ajax的post請求參數就是提交的json字符串。如:
    var data = {'name':'jack'};
    $http.post(url,data).success(function(rsp){
        //    code
     })

二、application/json

JSON.stringify()的方法,服務端也有處理JSON的函數。php

//請求的參數要處理:

JSON.stringify({name:'jack'})

圖片描述

2、四種常見的post請求方式:

一、背景

注:enctype 屬性規定在發送到服務器以前應該如何對錶單數據進行編碼。默認地,表單數據會編碼爲 "application/x-www-form-urlencoded"

圖片描述

(1)、HTTP 協議是以 ASCII 碼 傳輸,創建在 TCP/IP 協議之上的應用層規範。規範把 HTTP 請求分爲三個部分:狀態行、請求頭、消息主體。
(2)、協議規定 POST 提交的數據必須放在消息主體(entity-body)中,但協議並無規定數據必須 使用什麼編碼方式 。實際上,開發者徹底能夠本身決定消息主體的格式,只要最後發送的 HTTP 請求知足上面的格式就能夠。
(3)、數據發送出去,還要服務端解析成功纔有意義。通常服務端語言如 php、python 等,以及它們的 framework,都內置了自動解析常見數據格式的功能。服務端一般是根據請求頭(headers)中的 Content-Type 字段來獲知請求中的消息主體是用何種方式編碼,再對主體進行解析。html

二、開始介紹四種方式:

(1)、application/x-www-form-urlencoded
這應該是最多見的 POST 提交數據的方式了。瀏覽器的原生 <form> 表單,若是不設置 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交數據。java

<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>

此時能夠看到,python

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;其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼。大部分服務端語言都對這種方式很好的支持,經常使用的如jQuery中的ajax請求,Content-Type 默認值都是「application/x-www-form-urlencoded;charset=utf-8ajax

(2)、multipart/form-data
這也是常見的post請求方式,通常用來上傳文件,各大服務器的支持也比較好。因此咱們使用表單 上傳文件 時,必須讓<form>表單的enctype屬性值爲 multipart/form-data.json

注意:以上兩種方式:application/x-www-form-urlencoded和multipart/form-data都是瀏覽器原生支持的。

(3)、application/json
application/json做爲響應頭並不陌生,實際上,如今不少時候也把它做爲請求頭,用來告訴服務端消息主體是序列化的JSON字符串,除了低版本的IE,基本都支持。除了低版本的IE都支持JSON.stringify()的方法,服務端也有處理JSON的函數,使用json不會有任何麻煩。例如:瀏覽器

//請求數據
var data = {name:'jack',sex:'man'};
//請求數據序列化處理
JSON.stingify(data);

//結果:{'name':'jack','sex':'man'};

(4)、text/xml服務器

3、postman中post請求的form-data、x-www-form-urlencoded、raw、binary的區別

一、form-data:
等價於http請求中的multipart/form-data,它會將表單的數據處理爲一條消息,以標籤爲單元,用分隔符分開。既能夠上傳鍵值對,也能夠上傳文件。當上傳的字段是文件時,會有Content-Type來表名文件類型;content-disposition,用來講明字段的一些信息;
因爲有boundary隔離,因此multipart/form-data既能夠上傳文件,也能夠上傳鍵值對,它採用了鍵值對的方式,因此能夠上傳多個文件。app

圖片描述

二、x-www-form-urlencoded:
等價於application/x-www-from-urlencoded,會將表單內的數據轉換爲鍵值對,好比,name=java&age = 23函數

圖片描述

三、raw
能夠上傳任意格式的文本,能夠上傳text、json、xml、html等

圖片描述

四、binary
至關於Content-Type:application/octet-stream,從字面意思得知,只能夠上傳二進制數據,一般用來上傳文件,因爲沒有鍵值,因此,一次只能上傳一個文件。

multipart/form-data與x-www-form-urlencoded區別multipart/form-data:既能夠上傳文件等二進制數據,也能夠上傳表單鍵值對,只是最後會轉化爲一條信息;x-www-form-urlencoded:只能上傳鍵值對,而且鍵值對都是間隔分開的。

相關文章
相關標籤/搜索