【计算机网络笔记七】应用层(四)HTTP 通过Content-Type提交数据的方式

1. Content-Type: application/x-www-form-urlencoded 表示纯文本表单提交方式

格式如下:

POST /users HTTP/1.1 
Host: api.github.com
Content-Type: application/x-www-form-urlencoded 
Content-Length: 27

name=zhangsan&gender=male 

对应的 Retrofit 代码:

@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name, @Field("gender") String gender);

对于 GET 请求也有可能使用这种类型。

2. Content-Type: multipart/form-data;boundary=[分隔符] 包含文件的多文本表单提交方式

格式如下:

POST /home/upload.html HTTP/1.1
Accept: text/plain, */*
Accept-Language: zh-cn
Host: 192.168.24.56
Content-Type:multipart/form-data;boundary=-----------------------------7db372eb000e2
Content-Length: 3693
Connection: Keep-Alive

-------------------------------7db372eb000e2
Content-Disposition: form-data; name=“username”

admin
-------------------------------7db372eb000e2
Content-Disposition: form-data; name=“file”; filename=“kn.jpg”
Content-Type: image/jpeg
(此处省略jpeg文件二进制数据…)

-------------------------------7db372eb000e2–

注意这一行: Content-Type: multipart/form-data; boundary=---------------------------7db372eb000e2,根据 RFC1867,在这种方式下,Content-Type:multipart/form-data 字段是必须的。它包括一个名为 boundary 的标志,它可以是随便输入的字符串,对后面的具体内容也是必须的它用来分辨一段内容的开始

Content-Length: 3693 ,这里的 3693 是要上传文件的总长度。

绿色字体部分就是需要上传的数据,可以是文本,也可以是图片等。数据内容前面需要有 Content-Disposition, Content-Type 以及 Content-Transfer-Encoding 等说明字段。

最后的紫色部分就是协议的结尾了。

---------------------------7db372eb000e2 是分隔符,分隔多个文件、表单项。其中 b372eb000e2 是即时生成的一个数字,用以确保整个分隔符不会在文件或表单项的内容中出现。

Form 每个部分用分隔符分割,分隔符之前必须加上 “--” 这两个字符(即--{boundary})才能被 http 协议认为是 Form 的分隔符,表示结束的话,在正确的分隔符后面添加"--"表示结束(即--{boundary}--)。

前面的 ---------------------------7d 是 IE 特有的标志,Mozila 为---------------------------71

每个分隔的数据的都可以用 Content-Type 来表示下面数据的类型,可以参考 rfc1341 例如 :Contect-Type:image/jpeg 表示下面的数据是jpeg文件数据。

对应的 Retrofit 代码:

@Multipart
@POST("/users")
Call<User> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值