|
0 C9 ~' C8 V: L
POST请求的消息主体放在entity body中,服务器根据请求头中的Content-Type字段来获取消息主体的编码方式,进而进行解析数据一、application/x-www-form-urlencoded。 ! p) c& a s" n2 o7 V3 k+ k
最常见的POST提交数据的方式,原生Form表单,如果不设置enctype属性,默认为application/x-www-form-urlencoded方式提交数据首先,Content-Type都指定为application/x-www-form-urlencoded;其次,提交的表单数据会转换为键值对并按照key1=val&key2=val2的方式进行编码,key和val都进行了URL转码。
, t! S$ e3 d* c1 g8 e0 t& u 大部分服务端语言都对这种方式有很好的支持另外,如利用AJAX提交数据时,也可使用这种方式例如jQuery,Content-Type默认值都是"application/x-www-form-urlencoded;charset=utf-8"。
+ H1 O2 m9 D5 I3 e 二、multipart/form-data另一个常见的POST数据提交的方式,Form表单的enctype设置为multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符(这就是boundary的作用)分开,类似我们上面Content-Type中的例子。 7 S# R% `, C. P9 h
由于这种方式将数据有很多部分,它既可以上传键值对,也可以上传文件,甚至多个文件当上传的字段是文件时,会有Content-Type来说明文件类型;Content-disposition,用来说明字段的一些信息。
! f, W7 C, s* u9 @ 每部分都是以-boundary开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(字段、文本或二进制等)如果传输的是文件,还要包含文件名和文件类型信息消息主体最后以-boundary-标示结束三、application/json
; Q/ Y& [! j, n1 I5 |6 r Content-Type: application/json作为响应头比较常见实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的JSON字符串,其中一个好处就是JSON格式支持比键值对复杂得多的结构化数据。
7 C* r7 t2 h$ C1 s( P( ? I# w4 ] 由于JSON规范的流行,除了低版本IE之外的各大浏览器都原生支持JSON.stringify,服务端语言也都有处理JSON的函数,使用起来没有困难Goodle的AngularJS种的Ajax功能,默认就是提交JSON字符串。
0 g M0 \3 ]) K 四、text/xml答: XML的作用不言而喻,用于传输和存储数据,它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据,在JSON出现之前是业界一大标准(当然现在也是),相比JSON的优缺点大家有兴趣可以上网search。
+ T% p2 a! v) e7 R1 _ 因此,在POST提交数据时,xml类型也是不可缺少的一种,虽然一般场景上使用JSON可能更轻巧、灵活五、binary(application/octet-stream)答: 在谷歌浏览器的Postman工具中,还可以看到"binary"这一类型,指的就是一些二进制文件类型。
3 b! s) d6 Q2 S; E+ O7 | 如application/pdf,指定了特定二进制文件的MIME类型就像对于text文件类型若没有特定的子类型(subtype),就使用text/plain类似的,二进制文件没有特定或已知的subtype,即使用application/octet-stream,这是应用程序文件的默认值,一般很少直接使用。
5 ~+ ^3 ]$ a. Y/ u& G 对于application/octet-stream,只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)很多web服务器使用默认的application/octet-stream来发送未知类型。 ) D, t- H4 _# c& x# L
出于一些安全原因,对于这些资源浏览器不允许设置一些自定义默认操作,导致用户必须存储到本地以使用一般来说,设置正确的MIME类型很重要 % z( Y+ Z' Y1 K9 {
( y A, q# Y7 ^7 t
3 P; ^( C; V3 S( u+ H
$ p4 W( t4 l, h% l1 I5 T7 C+ n$ I& ]9 E9 h0 T) J
|