HTTP协议中的Accept与Content-Type的区别
HTTP协议的内容,其中,我们经常会用到 Accept 与 Content-Type,那么这两者有什么区别和联系呢?
- 类型不同
类型不同Accept属于请求头, Content-Type属于实体头。
Http报头分为通用报头,请求报头,响应报头和实体报头。
请求方的HTTP报头结构:通用报头|请求报头|实体报头
响应方的HTTP报头结构:通用报头|响应报头|实体报头
- 作用不同
Accept代表发送端(客户端)希望接受的数据类型。 比如:Accept:text/xml; 代表客户端希望接受的数据类型是xml类型。
Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。 比如:Content-Type:text/html; 代表发送端发送的数据格式是html。
二者合起来, Accept:text/xml; Content-Type:text/html ,即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html。
content-type application/x-www-form-urlencoded & application/json
前端向后端传输数据时,如果是get传输,直接传在url后;如果是post传输,则在请求体body中传输。
在body中的数据格式又有两种,一种是 json 数据格式,另一种是 字符串。具体要用哪种格式取决于后端入参的格式。
如果后端接收json数据类型,post 的 headers 需要设置 { ‘content-type’: ’application/json’ },传给后端的数据就形如 { ‘name’:’edward’, ‘age’:’25’ }
如果后端接收的是(表单)字符串类型,post 的 headers 需设置 { ‘content-type’: ’application/x-www-form-urlencoded’ },
,传输给后端的数据就形如 ‘name=edward&age=25’
项目开发中后端get请求需要接受(表单)字符串类型 但是post请求需要接手application/json,且后端返回类型不确定即可为字符串,也有可能json,axios的配置时的坑
axios中data不设置时,headers 设置content-type不生效,后端返回类型不确定需要设置 'Accept':'/'
let config;
if(method==="GET"){
config = {
method: 'get',
timeout: 120000, //上传较大图片需要响应较长时间
url: getFastUrl() + url,
data: {},
withCredentials: false,
headers: {
'Accept':'*/*',
'Content-Type': 'application/x-www-form-urlencoded'
}
}
}else{
config = {
method: method,
timeout: 120000, //上传较大图片需要响应较长时间
url: url,
data: method === "POST" || method === "PUT" ? params : null,
withCredentials: false,
headers: {
// 'Content-Type': 'application/x-www-form-urlencoded'
"Content-Type": "application/json"
}
}
}
网友评论