-
http协议
首先继续了解一下http:
- URL
http请求自然是要有
URL
的,而一个完整的URL
包括一下几个部分:
- http请求消息
我们用抓包看看具体数据:
先是get
,请求数据直接加在URL
后面,因此传输数据会受URL
长度限制,也不安全:
而
post
会有些不同,请求数据放在请求体中,因此传输数据没有大小限制,也比get
安全:
get
和post
的区别:
- http响应消息
-
多表单上传
服务端通常是根据请求头(headers
)中的 Content-Type
字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。 所以 POST
提交数据方案,包含了 Content-Type
和消息主体编码方式两部分。平常上传文件就属于多表单上传,请求数据都要经过处理的,比如:
Alamofire.upload(multipartFormData: { (mutilPartData) in
mutilPartData.append("123".data(using: .utf8)!, withName: "id")
mutilPartData.append("2020-12-12".data(using: .utf8)!, withName: "time")
mutilPartData.append("你的名字".data(using: .utf8)!, withName: "name")
mutilPartData.append(data as! Data, withName: "file")
}, to: urlString) { (result) in
print(result)
}
通过抓包看数据是长这样的:
假装抓包-
--boundary
分隔符,为了方便读取数据 -
Content-Disposition: form-data; name="(key)"
其中Content-disposition
是MIME
协议的扩展,MIME
指示用户代理如何显示附加的文件。Content-disposition
其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,这里就是添加了一个key
-
\r\n
换行符 -
(value)
参数值(下面乱码是文件data
数据) -
--boundary
开始下一个参数,以此重复
...
网友评论