blog icon indicating copy to clipboard operation
blog copied to clipboard

HTTP请求中的Form Data与Request Payload的区别

Open rainnaZR opened this issue 8 years ago • 21 comments


title: HTTP请求中的Form Data与Request Payload的区别 date: 2017-08-10

前端开发中经常会用到AJAX发送异步请求,对于POST类型的请求会附带请求数据。而常用的两种传参方式为:Form Data 和 Request Payload。

121212

334343

GET请求

使用get请求时,参数会以key=value的形式拼接在请求的url后面。例如:

http://m.baidu.com/address/getlist.html?limit=50&offset=0&t=1502345139870

但是受限于请求URL的长度限制,一般参数较少时会使用get请求。

POST请求

当参数数量较多,且对数据有一定安全性要求时,会考虑用post请求传递参数数据。POST请求的参数数据是在请求体中。

方式一: Form Data形式

当POST请求的请求头里设置Content-Type: application/x-www-form-urlencoded(默认), 参数在请求体以标准的Form Data的形式提交,以&符号拼接,参数格式为key=value&key=value&key=value...

3333

121212

前端代码设置:

xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send('a=1&b=2&c=3');

在servlet中,后端可以通过request.getParameter(name)的形式来获取表单参数。

方式二:Request Payload形式

如果使用AJAX原生POST请求,请求头里设置Content-Type:application/json,请求的参数会显示在Request Payload中,参数格式为JSON格式:{"key":"value","key":"value"...},这种方式可读性会更好。

444

334343

后端可以使用getRequestPayload方法来获取。

Form Data 和 Request Payload 区别

  1. 如果请求头里设置Content-Type: application/x-www-form-urlencoded,那么这个请求被认为是表单请求,参数出现在Form Data里,格式为key=value&key=value&key=value...

  2. 原生的AJAX请求头里设置Content-Type:application/json,或者使用默认的请求头Content-Type:text/plain;参数会显示在Request payload块里提交。

参考文档: http://www.cnblogs.com/btgyoyo/p/6141480.html http://xiaobaoqiu.github.io/blog/2014/09/04/form-data-vs-request-payload/

rainnaZR avatar Aug 10 '17 09:08 rainnaZR

Great~

yzfdjzwl avatar Feb 02 '18 04:02 yzfdjzwl

good job ~

supgeek-rod avatar Feb 26 '18 12:02 supgeek-rod

thanks

freestyledash avatar Mar 04 '18 14:03 freestyledash

great

uyarn avatar Mar 21 '18 21:03 uyarn

Quite helpful! Thanks, man.

Moriarty16 avatar Apr 11 '18 08:04 Moriarty16

还有一种类型,比如上传图片。 2018-05-03 4 30 47

kaneruan avatar May 03 '18 08:05 kaneruan

Java getRequestPayload

https://stackoverflow.com/questions/14525982/getting-request-payload-from-post-request-in-java-servlet

GenweiWu avatar Jul 03 '18 08:07 GenweiWu

学习了

80666881 avatar Dec 17 '18 09:12 80666881

Great

zhonghuasheng avatar Dec 26 '18 07:12 zhonghuasheng

还有一种类型,比如上传图片。 2018-05-03 4 30 47

比较有意思的是,用了 FormData API 或者 mutipart/form-data, 请求反而放在了 “Payload“ 下面。

xuxinhang avatar Dec 28 '18 09:12 xuxinhang

mark

ql434 avatar Jan 22 '19 13:01 ql434

文章只是描述了表象,并没有讲这两种区别的更深入的内容。比如为什么有这种区分

vuuihc avatar Feb 12 '19 14:02 vuuihc

了解。多谢

chao15658 avatar Jul 26 '19 02:07 chao15658

this saves my day! thanks a lot!

howtomakeaturn avatar Aug 12 '19 06:08 howtomakeaturn

解决了我的困惑

ghost avatar Aug 14 '19 10:08 ghost

学习了!

LuVx21 avatar Mar 16 '20 07:03 LuVx21

post也一样不安全啊,只不过没有那么明显罢了

zeguangzhang avatar Mar 16 '20 08:03 zeguangzhang

GET 可以附带form data或者其他格式的payload body吗?

pei-han avatar May 30 '20 01:05 pei-han

3ku!

ghost avatar Sep 24 '20 13:09 ghost

so great!

Fxskyzz avatar Jan 29 '21 03:01 Fxskyzz

thank you !

codingbylch avatar Apr 12 '21 02:04 codingbylch