http header Content-Type之常用三种
Content-Type 用于指示资源的MIME类型
- 在响应头中,告诉客户端实际返回内容的类型
- 在请求头中,告诉服务器实际发送的数据类型
句法:
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something
指令
media-type
- 资源或数据的 MIME type 。
- charset
- 字符编码标准。
- boundary
- 对于多部分实体,boundary 是必需的,其包括来自一组字符的1到70个字符,已知通过电子邮件网关是非常健壮的,而不是以空白结尾。它用于封装消息的多个部分的边界。
这里主要介绍三种常见的media-type: application/x-www-form-urlencoded, multipart/form-data, application/json
我们使用chrome控制台可以看到,有些请求参数在Form Data中,一个在Request Payload中,这是因为Content-Type设置不同。
- application/x-www-form-urlencoded 请求参数在Form Data中,键值对,用间隔分开,如: name1=value1&name2=value2
- multipart/form-data 请求参数在Request Payload 中, 可以上传文件,也可以上传键值对,最后会转化为一条由boundary字符串分隔的信息体。boundary是一个不可能在数据中出现的字符串。 如:------WebKitFormBoundaryyb1zYhTI38xpQxBK就是boundary
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyb1zYhTI38xpQxBK
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="city_id"
1
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="company_id"
2
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryyb1zYhTI38xpQxBK--
3. application/json 请求参数在Request Payload中, 参数形式:{key:value}
以上三种类型,在服务端获取参数的方法不同, 因此如果设置错误,可能会造成后端接受不到数据的情况。
实际开发中选择哪种Content-Type呢?
二进制文件选择:multipart/form-data;
大段的json字符串,适合使用payload,因此可以选择:application/json
application/x-www-form-urlencoded:最常见,原生form变动,如果不设置enctype属性,那么默认该类型提交数据。