从http协议,form表单,ajax,httpclient角度解释Content-Type的设置

百度解释:

Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

常见Content-Type的值:
1,application/x-www-form-urlencoded(默认值,又名url编码方式),
编码方式:
是使用&拼接传递的key(参数名)=value(参数值),如name=zhangsan&age=18 ,对于中文url编码的数据都是以“%”为前缀,后面跟随两位的16进制,例如“传智”这两个字使用UTF-8的url编码用为“%E4%BC%A0%E6%99%BA”; 然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低,所以才有了multipart/form-data编码方式。

在这里插入图片描述2,multipart/form-data(又名多部分表单格式),用于向服务器发送大量的数据,常用语图片上传和文件上传,它既可以发送文本数据,也支持二进制数据上传。

编码方式:

-----------------------------11615134939957

Content-Disposition: form-data; name=“b”

pppp

-----------------------------11615134939957

Content-Disposition: form-data; name=“pro”

02

-----------------------------11615134939957–

3,application/json(json格式),作用,用于提交json数据(json数据本质是json格式的字符串),

编码方式:
在这里插入图片描述4,text/plain(又名普通文本格式),
文本方式,传递的数据不进行改动,如zhanga=张id=1id
在这里插入图片描述
1,http协议角度

本质:Content-Type本质上是http的请求头中的一个设置,作用是发起http请求时,设置提交数据的格式和编码。

并且get请求没有这个请求头,不能手动设置。虽然get请求没有这个请求头,但是get请求使用默认的application/x-www-form-urlencoded的方式进行传递数据,post请求有这个请求头,并且可以手动设置进行更改默认的application/x-www-form-urlencoded

2,form表单角度

<form action="#"method="post"enctype="multipart/form-data">
           b:<inputtype="text"name="b"id="ddd4" />
              <selectname="pro">
                  <optionvalue="01">黑龙江省</option>
                  <optionvalue="02"selected="selected">辽宁省</option>
                  <optionvalue="03">吉林省</option>
                  <option>积极哈尔</option>
              </select>
           <!--文件上传控件-->
           <!--<inputtype="file" name="pictureFile"/> -->
           <inputtype="submit"value="提交"/>
</form>

通过enctype="multipart/form-data"属性进行设置,可以设置的值有application/x-www-form-urlencoded,multipart/form-data,text/plain,默认是application/x-www-form-urlencoded。

注意:form表单提交使用的是http协议,同上,get请求提交表单不能设置该属性,默认使用application/x-www-form-urlencoded方式进行编码,post请求提交表单可以手动设置该属性,post请求提交表单默认当然也是使用application/x-www-form-urlencoded方式进行编码。

当上传控件进行文件或者图片上传时,只能使用post请求(因为get请求不能设置enctype),并且设置enctype=“multipart/form-data”,才支持上传。

3,ajax角度

. a j a x , .ajax, .ajax,.get,$.post中默认都是使用application/x-www-form-urlencoded方式进行编码

ajax同样使用http协议, . g e t 发 送 g e t 请 求 , 不 能 手 动 更 改 C o n t e n t − T y p e 编 码 方 式 , .get发送get请求,不能手动更改Content-Type编码方式, .getgetContentType.post可以更改,$.ajax使用post方式提交时同理可以更改。

更改Content-Type时常用的方式:

1,使用ajax提交表单需要序列化表单,使其提交内容格式变成普通表单的提交格式(即application/x-www-form-urlencoded格式),这样才是表单提交的正确格式

function updateCustomer(){

         $.post("<%=basePath%>customer/update.action",$("#edit_customer_form").serialize(),function(data){

           if (data =='ok') {

                alert("客户信息更新成功!");

                window.location.reload();

            }else{

                alert('系统繁忙,请稍后再试');

            }

         });

      }

$("#edit_customer_form").serialize()

$("#edit_customer_form")中的edit_customer_form是表单的id值,表示选中该表单

调用serialize()方法,即将表单的内容序列化,用来ajax提交其内容,这样就是使用默认的application/x-www-form-urlencoded

<form class="form-horizontal"id="edit_customer_form">
……

</form>

2,使用ajax提交json

$.ajax({

        type:"post",

        url:"${pageContext.request.contextPath}/items/sendJson.action",

        contentType:"application/json;charset=utf-8",//指定从页面传给Controller的数据格式是什么样的

        data:'{"name":"测试商品","price":99.9}',

        success:function(data){

            alert(data);

        }

    }); 

4,httpclient角度

httpclient提交数据,常见的是两种,

一种是通过模拟form表单,提交application/x-www-form-urlencoded(默认提交方式)编码的数据,

一种是提交json格式的数据
备注:

在Content-Type属性当中还是指定提交内容的charset字符编码。一般不进行设置,它只是告诉web服务器post提交的数据采用的何种字符编码。

一般在开发过程,是由前端工程与后端UI工程师商量好使用什么字符编码格式来post提交的,然后后端ui工程师按照固定的字符编码来解析提交的数据。所以这里设置的charset没有多大作用。

原文:https://blog.csdn.net/qq_38753623/article/details/79280120

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值