POST请求的几种content type类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POST请求的几种content type类型相关的知识,希望对你有一定的参考价值。

参考技术A content-type是http请求的响应头和请求头的字段。当作为响应头时,告诉客户端实际返回的内容的内容类型。作为请求头时(post或者put),客户端告诉服务器实际发送的数据类型。

在前端开发过程中,通常需要跟后端工程师对接接口的数据格式,不同的数据类型对于服务器来说有不同的处理方式,因此我们需要关注不同的conten-type类型.

1. application/x-www-form-urlencoded

浏览器原生form表单默认的提交方式(在不设置enctype的情况下)。此时请求头的格式如下:

content-type: application/x-www-form-urlencoded;charset=utf-8

form-data: key1=val1&key2=val2

此时后端例如php可以通过$_POST["key1"]的方法来获取参数值。

此种情况下:非字母或数字的字符会被进行编码(编码方式 https://developer.mozilla.org/zh-CN/docs/Glossary/percent-encoding ),这也是为什么这种方式不支持二进制数据的原因。

2. multipart/form-data

与application/x-www-form-urlencoded 的区别是她支持文件的传输,并且它的传输数据放在request-payload里,并且以bounday进行分隔。

POST /test.html HTTP/1.1

Host: example.org

Content-Type: multipart/form-data;boundary="boundary"

--boundary

Content-Disposition: form-data; name="field1"

value1

--boundary

Content-Disposition: form-data; name="field2"; filename="example.txt"

value2

3. application/json

格式是这样的:

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

Content-Type: application/json;charset=utf-8

"title":"test","sub":[1,2,3]

它用来告诉服务端消息主体是 序列化后的 JSON 字符串 ,其中一个好处就是JSON 格式支持比键值对复杂得多的结构化数据。此时php不能直接通过$_POST获取,需要先从php://input里获得原始输入流,再json_decode成对象

4.text/plain

传统的ajax请求提交

function submit2()

    var xhr = new XMLHttpRequest();

    xhr.timeout = 3000;

    var obj = a: 1, b: 2;

    xhr.open('POST', '/');

    xhr.send(obj);



另外,对于axios请求,不同的请求方式content-type也不同

function submit3()

    var sence1 = 'name=123&val=456';

    var sence2 = name: 123, val: 456;

    axios.post('/', sence1)



1. 当传递的是字符串的时候

    

2. 当传递的是对象的时候

    

总结

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

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

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

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

以上是关于POST请求的几种content type类型的主要内容,如果未能解决你的问题,请参考以下文章

postman模拟post请求的几种请求体

HTTP 请求头中的Content-Type类型

content-type的几种取值

四种常见的 POST-------- content-type数据提交方式

HTTP请求中,几种常见的Content-Type类型解析

Axios请求头中常见的几种Content-Type