content-type

  • content-type是http请求的响应头和请求头的字段。当作为响应头时,告诉客户端实际返回的内容的内容类型。作为请求头时,客户端告诉服务器实际发送的数据类型。
  • 前端开发过程中,需要跟后端工程师对接接口的数据格式,不同的数据类型对于服务器来说有不同的处理方式,因此我们需要关注不同的conten-type类型.
1. application/x-www-form-urlencoded
  • 浏览器原生form表单默认的提交方式(在不设置enctype的情况下)。
  • 提交的数据按照 k1=v1&k2=v2的方式进行编码,key和val都进行了URL转码.此时请求头的格式如下:
content-type: application/x-www-form-urlencoded;charset=utf-8
form-data:  k1=v1&k2=v2
2. multipart/form-data
  • 与application/x-www-form-urlencoded 的区别是它支持文件的传输,并且它的传输数据放在request-payload里,并且以bounday进行分隔。
  • 常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctype 等于这个值
<form action="/" method="post" enctype="multipart/form-data">
  <input type="text" name="name" value="some text">
  <input type="file" name="fileName">
  <button type="submit">Submit</button>
</form>
  • 请求头
POST /foo HTTP/1.1
Content-Length: 68137
Content-Type: multipart/form-data;
boundary=---------------------------974767299852498929531610575
---------------------------974767299852498929531610575
Content-Disposition: form-data; name="name"  value="some text"
---------------------------974767299852498929531610575
Content-Disposition: form-data; name="fileName"; filename="foo.txt"
Content-Type: text/plain
(content of the uploaded file foo.txt)
---------------------------974767299852498929531610575--
4.application/json
  • 消息主体是序列化后的 JSON 字符串,这个类型越来越多地被大家所使用
POST http://www.example.com HTTP/1.1 
Content-Type: application/json;charset=utf-8

{"title":"test","sub":["a","b","c"]}
  • 它用来告诉服务端消息主体是序列化后的 JSON 字符串,其中一个好处就是JSON 格式支持比键值对复杂得多的结构化数据。
  • 特别适合 RESTful 的接口。传递JSON字符串可以方便的让前端转为js的对象,进行显示和逻辑操作。
5.text/plain
  • 传统的ajax请求提交
function submit2() {
    var xhr = new XMLHttpRequest();
    xhr.timeout = 2000;
    var obj = {a: 1, b: 2};
    xhr.open('POST', '/');
    xhr.send(obj);
}
6.text/xml
  • 是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范
POST [http://www.example.com](http://www.example.com) HTTP/1.1 
Content-Type: text/xml 
<!--?xml version="1.0"?--> 
<methodcall> 
    <methodname>method1</methodname> 
    <params> 
        <param> 
            <value>50</value> 
        </param>
    </params> 
</methodcall> 
  • 总结

1.传统的ajax请求时候,Content-Type默认为"文本"类型。

2.传统的form提交的时候,Content-Type默认为"Form"类型。

7. 对于axios请求,不同的请求方式content-type也不同
function submit3() {
    var p1 = 'name=a&val=b';
    var p1 = {name: a, val: b};
    axios.post('/url', p1 )
}
  • 当传递的是字符串的时候:application/x-www-form-urlencoded

  • 当传递的是对象的时候:application/json

  • 总结:

1.axios传递字符串的时候,Content-Type默认为"Form"类型。

2.axios传递对象的时候,Content-Type默认为"JSON"类型

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐