request payload
最近在调试代码时发现有Request Payload的情况,从网上查一些文件,也都有较多的描述。下面我只是说明一下大家没有注意的地方
关于HTTP请求,都是通过URL及参数向后台发送数据。主要方式有GET, POST。对这两种方式,GET的参数都会放在URL的后面,一般称之为query参数。POST的都放在HTTP的报文BODY里,可以query参数的形式,也可以multipart格式,还有一种JSON格式,即Request Payload格式。
multipart, Request Payload是通过request Header中的ContentType区分的:
multipart格式:ContentType: multipart/form-data;boundary=--xxxxxxx, 注意对multipart的格式都要有boundary做为BODY中的参数分隔符,(关于该格式的讲解以后再写)
Request Payload格式:ContentType: application/json
在后台的处理中对这三种格式的处理是不相同的。
GET格式都在URL后面,以key1=value1&key2=value2的KV格式存在,且不会很长(协议规定为1024个字节,但现在浏览器都会适当加长一些)。后台处理这种参数时可以使用同步处理,因为报文头收到后参数也就收全了。
POST时参数也可以使用上面的KV格式存在,但是会放在报文体中。当数据量不大时,一般也会和报文头一起收到。但数据量大的时会被拆分到多个报文中。因此必须使用异步方式收取。收全后处理同GET相同。
对于multipart格式,需要使用流方式边收边解析,因为有可能是大文件上传。
对于RequestPayload格式,可能也是异步发送(这个没有验证过),但数据量一般不会太大,因此它是一个JSON格式,因此必须等报文收全后才能处理。目前对JSON格式的支持比较普遍,都有相关的函数来解析JSON字符串,直接生成JSON对象,因此这种方式也是最方便的。特别是使用nodejs server时就可以直接在代码中使用了。