网络学习(三)http请求和多表单上传的消息格式

2020-12-07  本文已影响0人  无悔zero

首先继续了解一下http:

http请求自然是要有URL的,而一个完整的URL包括一下几个部分:

我们用抓包看看具体数据:
先是get,请求数据直接加在URL后面,因此传输数据会受URL长度限制,也不安全:

post会有些不同,请求数据放在请求体中,因此传输数据没有大小限制,也比get安全:

getpost的区别:

服务端通常是根据请求头(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)
}

通过抓包看数据是长这样的:

假装抓包
  1. --boundary 分隔符,为了方便读取数据

  2. Content-Disposition: form-data; name="(key)" 其中 Content-dispositionMIME 协议的扩展,MIME 指示用户代理如何显示附加的文件。Content-disposition 其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,这里就是添加了一个key

  3. \r\n 换行符

  4. (value) 参数值(下面乱码是文件data数据)

  5. --boundary 开始下一个参数,以此重复
    ...

上一篇 下一篇

猜你喜欢

热点阅读