content-type
content-type只是告诉服务端这个请求是什么类型的数据,一种约定俗成的方式,服务端可以根据情况来解析,当然双方都有义务尊重这样的约定。
常用的有以下几种
————————————————————————
text/plain,body是一个纯文本。一般需要加上编码格式,如text/plain; charset=utf-8。下面just a text就是body
POST / HTTP/1.1
Content-Type: text/plain; charset=utf-8
Host: app.bbtang.me
Connection: close
User-Agent: Paw/3.0.12 (Macintosh; OS X/10.12.2) GCDHTTPRequest
Content-Length: 11
just a text
————————————————————————
application/json,body是一个json格式的字符串,如{“key”:”value”},同样要加上编码格式如application/json; charset=utf-8
POST / HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: app.bbtang.me
Connection: close
User-Agent: Paw/3.0.12 (Macintosh; OS X/10.12.2) GCDHTTPRequest
Content-Length: 15
{“key”:”value”}
————————————————————————
application/x-www-form-urlencoded,body是键值形式的字符串,常见的请求方式,AF的默认方式。
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: app.bbtang.me
Connection: close
User-Agent: Paw/3.0.12 (Macintosh; OS X/10.12.2) GCDHTTPRequest
Content-Length: 9
key=value
————————————————————————
multipart/form-data,这种会比较复杂,AF需要通过FormData来拼接,主要用于上传带参数的文件。需要指定一个boundary标签作为字段分隔。
boundary是随便写的,但需要在头部标明,服务端需要从这里拿到这个标签才能将body分段。
POST / HTTP/1.1
Content-Type: multipart/form-data; charset=utf-8; boundary=X_PAW_BOUNDARY
Host: app.bbtang.me
Connection: close
User-Agent: Paw/3.0.12 (Macintosh; OS X/10.12.2) GCDHTTPRequest
Content-Length: 99
–X_PAW_BOUNDARY
Content-Disposition: form-data; name=”key”
value
–X_PAW_BOUNDARY–
file,根据Content-Type来放入文件数据,和直接放文本有点类似。
————————————————————————
AFHTTPSessionManager有一个requestSerializer属性,该属性用来将请求序列化的。简单来说就是对传入的parameters进行处理。
AFHTTPRequestSerializer是默认的,它有两个子类,一个用于json序列化,一个用于property-list。
在AFHTTPSessionManager里调用普通的get和post方法传入的参数会根据requestSerializer来配置,默认的情况情况下是application/x-www-form-urlencoded。
AF默认没有text/plain这种方式,定义一个AFHTTPRequestSerializer来支持。