从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角度

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

ajax同样使用http协议,$.get发送get请求,不能手动更改Content-Type编码方式,$.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没有多大作用。

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值