原文链接:https://blog.csdn.net/wangjun5159/article/details/49644507/
https://blog.csdn.net/five3/article/details/7181521/

一、multipart/form-data:

  • multipart/form-data的基础是post请求,即基于post请求来实现的
  • multipart/form-data形式的post与普通post请求的不同之处体现在请求头,请求体2个部分

multipart/form-data请求头:
必须包含Content-Type信息,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中不同参数的内容(普通post请求的参数分割符默认为&,参数与参数值的分隔符为=)。具体的头信息格式如下:

Content-Type: multipart/form-data; boundary=${bound}   
 
其中${bound} 是一个占位符,代表我们规定的具体分割符;可以自己任意规定,
但为了避免和正常文本重复了,尽量要使用复杂一点的内容。
如:--------------------56423498738365


multipart/form-data请求体:

它也是一个字符串,不过和普通post请求体不同的是它的构造方式。普通post请求体是简单的键值对连接,格式如下:

k1=v1&k2=v2&k3=v3

而multipart/form-data则是添加了分隔符、参数描述信息等内容的构造体。具体格式如下:

POST http://www.xx.com/myproject/service1
Host: 192.168.0.201:8694
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Cache-Control: no-cache
Postman-Token: c3d85a6c-9849-7e3e-5c89-5b994b335b1d
 
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name1"
 
value1
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name2"
 
value2
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file1"; filename="94b5b232gw1ewlx3p595wg20ak0574qq.gif"
Content-Type: image/gif
 
 
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file2"; filename="1443175219259.jpg"
Content-Type: image/jpeg
 
 
----WebKitFormBoundary7MA4YWxkTrZu0gW

1、既可以提交普通键值对,也可以提交(多个)文件键值对。

2、HTTP规范中的Content-Type不包含此类型,只能用在POST提交方式下,属于http客户端(浏览器、java httpclient)的扩展

3、通常在浏览器表单中,或者http客户端(java httpclient)中使用。

页面中,form的enctype是multipart/form-data,提交时,content-type也是multipart/form-data。

二、application/octet-stream

1、只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)

2、属于HTTP规范中Content-Type的一种

3、很少使用

三、application/x-www-form-urlencoded

1、不属于http content-type规范,通常用于浏览器表单提交,数据组织格式:name1=value1&name2=value2,post时会放入http body,get时,显示在在地址栏。

2、所有键与值,都会被urlencoded,请查看urlencoder

数据组织格式

POST http://www.xx.com/myproject/service HTTP/1.1
Host: 192.168.0.201:8694
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: f5f6240c-08d3-8695-9473-607038f71eaa
 
name11=file1&name2=value2

text/html和text/plain的区别

1、text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。

它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的

POST http://www.example.com HTTP/1.1

Content-Type: text/xml

<?xml version="1.0"?>

<methodCall>

    <methodName>examples.getStateName</methodName>

    <params>

        <param>

            <value><i4>41</i4></value>

        </param>

    </params>

</methodCall>

2、text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。

原文链接:https://blog.csdn.net/a732894380/article/details/83957646

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐