欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > application/x-www-form-urlencoded与application/json

application/x-www-form-urlencoded与application/json

2025/6/19 2:28:52 来源:https://blog.csdn.net/m0_73334325/article/details/148693632  浏览:    关键词:application/x-www-form-urlencoded与application/json

前言:

        和搭档进行接口联调的时候,每次浏览器端进行了请求体的设置,但是在服务器端一直都接收不到我传递过的去参数。每次都尝试设置不同的 Content-Type 值,排除问题。写篇文章记录下方便日后复习。

正文:

之前写过一篇文章关于 HTTP请求体编码方式 HTTP请求体编码方式_请求体是文件时 用什么编码-CSDN博客

关于 HTTP 请求体编码方式 无非这三个  application/x-www-form-urlencodedapplication/json multipart/form-data   

在<form>标签中,enctype 属性规定在向服务器发送表单数据之前如何对数据进行编码。

        方式一: application/x-www-form-urlencoded (默认方式)

                        数据格式:key1=value1&key2=value2 (URL编码)

        方式二:multipart/form-data

                        用于文件上传,数据以 boundary 分隔

        方式三:text/plain

                        纯文本格式(较少使用) 

当action 为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字符串(name=value1&name2=value2...),然后把这个字符串拼接到url后面,用?分隔。

当action为post时候,浏览器把form数据封装到http body中,然后发送到服务器。如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了,但是如果有type=file的话,就要用到multioart/form-data,浏览器会把整个表单位以控件为分割单位,并为每个部分加上Content-Disposition(form-data或file),Content-Type(默认为text/plain),name(空间name)等信息,并加上分割符(boundary)

enctype 属性通常用于<form>元素,但在JQuery的AJAX请求中,对应的概念是contentType(用于设置请求头的Content-Type)。JQuery会根据contentType和data的类型自动处理数据的编码。

JQuery AJAX中 contentType (相当于enctype)

contentType数据格式使用场景
application/x-www-form-urlencoded(默认)name=lisi&age=30普通表单
multipart/form-data带boundary的分块数据文件上传(需配合FormData)
application/json{"name":"lisi","age":30}发送JSON数据

 示例代码:

//默认 x-www-form-urlencoded
$.ajax({url:"/user",type:'post',dataType:'json',//预期服务器返回的数据类型data:{ //发送到服务器的数据,仅自动转换为请求字符串格式,name:"李四",age:30}
})//multipart/form-data(文件上传)
let formData = new FormData()
formData.append("name","李四")
formData.append("file",fileInput.files[0])$.ajax({url:'/uploadFile',type:'post',data:formData,processData:false,//禁止jQuery处理数据contentType:false, //让浏览器自动设置Content-Type为multipart/form-data
})//application/json (发送JSON) ---- 手动设置contentType 并使用JSON.stringify
$.ajax({url:'/sendJson',type:'post',contentType:'application/json', //设置请求头data:JSON.stringify({name:'lisi',age:30})
})

在jQuery的AJAX请求中,默认的Content-Type会根据请求的数据类型和数据格式自动设置

1、当发送get请求或没有请求体时,通常不会设置Content-Type头,因为get请求没有请求头

2、当发送POST请求且data是普通对象(如{key:'value'})时:jQuery默认使用 application/x-www-form-urlencoded;charset=UTF-8,数据会被编码成key=value&key2=value2的形式

3、当发送POST请求且data是FormData对象时,jQuery会自动设置Content-Type为multupart/form-data,并附带正确的boundary。如果是FormData或Blob等特殊数据,jQuery会调整Content-Type,但通常需要配合processData:false和contentType:false使用。

4、当发送POST请求且data是JSON字符串(如:JSON.stringfy({key:'value'}))时,需要手动设置Content-Type:application/json,否则jQuery不会自动处理。

axios默认使用的是application/json格式 !!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词