• Http中ContentType的取值讲解


    一、Content-Type的取值

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息(MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息),但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值:

    1. 常见的媒体格式类型:Content-Type: text/html;charset:utf-8;
      • text/html : HTML格式
      • text/plain :纯文本格式   
      • text/xml :  XML格式
      • image/gif :gif图片格式
      • image/jpeg :jpg图片格式 
      • image/png:png图片格式

            2. 以application开头的媒体格式类型:

      • application/json    : JSON数据格式
      •    application/pdf       :pdf格式  
      •    application/msword  : Word文档格式
      •    application/octet-stream : 二进制流数据(如常见的文件下载)
      •    application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式),应用于表单
      •    application/xhtml+xml :XHTML格式
      •    application/xml     : XML数据格式
      •    application/atom+xml  :Atom XML聚合格式   

            3. 当在表单中需要上传文件的时候,使用的媒体格式类型是:multipart/form-data

    二、四种常见的POST提交数据方式的媒体格式类型详解

    1、application/json

    •   application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。 
    •   JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用。记得我几年前做一个项目时,需要提交的数据层次非常深,我就是把数据 JSON 序列化之后来提交的。不过当时我是把 JSON 字符串作为 val,仍然放在键值对里,以 x-www-form-urlencoded 方式提交。 
    •   Google 的 AngularJS 中的 Ajax 功能,默认就是提交 JSON 字符串(当然 AngularJS 也可以配置为使用 x-www-form-urlencoded 方式提交数据 )。例如下面这段代码: 
      var data = {'title':'test', 'sub' : [1,2,3]}; 
      $http.post(url, data).success(function(result) { 
          ... 
      }); 

      最终发送的请求是: 

      POST http://www.example.com HTTP/1.1 
      Content-Type: application/json;charset=utf-8 
      {"title":"test","sub":[1,2,3]} 
      这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好。但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode 成对象。一些 php 框架已经开始这么做了。 

    2、application/x-www-form-urlencoded(Content-Type: application/x-www-form-urlencoded;charset=utf-8 )

      这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 encType 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据;

    •   首先,Content-Type 被指定为 application/x-www-form-urlencoded;
    •   其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码;

    3、multipart/form-data

      当使用表单上传文件时,必须设置encType属性为这个请求头,下面是一个请求示例的network截图:

    上面提到的两种表单方式都是浏览器原生支持的,而且现阶段原生 form 表单也只支持这两种方式。但是随着越来越多的 Web 站点,尤其是 WebApp,全部使用 Ajax 进行数据交互之后,我们完全可以定义新的数据提交方式,给开发带来更多便利。

     4、text/xml 

      尚未使用,如遇到的话会持续进行更新

    三、参考资料

    https://www.cnblogs.com/wushifeng/p/6707248.html

    北栀女孩儿
  • 相关阅读:
    第四十三课:jQuery插件化
    js模块化开发
    第四十二课:基于CSS的动画引擎
    第四十一课:CSS3 animation详解
    第四十课:CSS3 transition详解
    第三十九课:requestAnimationFrame详解
    几种排序
    图与搜索
    数组
    链表
  • 原文地址:https://www.cnblogs.com/wxh0929/p/11130464.html
Copyright © 2020-2023  润新知