• http content-type详解


    一、Content-Type的介绍及取值

       http协议是建立在tcp/ip协议之上的应用层协议,主要包括三个部分,状态行,头部信息,消息主体。对应一个http请求就是:请求行,请求头,请求体。

            协议规定post提交的数据,必须包含在消息主体中entity-body中,但是协议并没有规定数据使用什么编码方式。开发者可以自己决定消息主体的格式。

            数据发送出去后,需要接收的服务端解析成功,一般服务端会根据content-type字段来获取参数是怎么编码的,然后对应去解码。

            在最早的http post请求中,只支持application/x-www-form-urlencoded,参数都是通过浏览器的url传递。其实是不支持文件上传的,这样有很多不便。在1995年的时候,出台了rfc1867,也就是《RFC 1867 From-based file upload in HTML》,用以支持文件上传。

    所以content-type扩充了multipart/form-data用以支持向服务器发送二进制数据。后来随着web应用的增多,增加了诸如application/json的类型。

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

    Content-Type 标头告诉客户端实际返回的内容的内容类型。

    语法格式:

    Content-Type: text/html; charset=utf-8
    Content-Type: multipart/form-data; boundary=something

    实例:

    常见的媒体格式类型如下:

    • text/html : HTML格式
    • text/plain :纯文本格式
    • text/xml : XML格式
    • image/gif :gif图片格式
    • image/jpeg :jpg图片格式
    • image/png:png图片格式

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

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

    另外一种常见的媒体格式是上传文件之时使用的:

    • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

    HTTP content-type 对照表

    文件扩展名Content-Type(Mime-Type)文件扩展名Content-Type(Mime-Type)
    .*( 二进制流,不知道下载文件类型) application/octet-stream .tif image/tiff
    .001 application/x-001 .301 application/x-301
    .323 text/h323 .906 application/x-906
    .907 drawing/907 .a11 application/x-a11
    .acp audio/x-mei-aac .ai application/postscript
    .aif audio/aiff .aifc audio/aiff
    .aiff audio/aiff .anv application/x-anv
    .asa text/asa .asf video/x-ms-asf
    .asp text/asp .asx video/x-ms-asf
    .au audio/basic .avi video/avi
    .awf application/vnd.adobe.workflow .biz text/xml
    .bmp application/x-bmp .bot application/x-bot
    .c4t application/x-c4t .c90 application/x-c90
    .cal application/x-cals .cat application/vnd.ms-pki.seccat
    .cdf application/x-netcdf .cdr application/x-cdr
    .cel application/x-cel .cer application/x-x509-ca-cert
    .cg4 application/x-g4 .cgm application/x-cgm
    .cit application/x-cit .class java/*
    .cml text/xml .cmp application/x-cmp
    .cmx application/x-cmx .cot application/x-cot
    .crl application/pkix-crl .crt application/x-x509-ca-cert
    .csi application/x-csi .css text/css
    .cut application/x-cut .dbf application/x-dbf
    .dbm application/x-dbm .dbx application/x-dbx
    .dcd text/xml .dcx application/x-dcx
    .der application/x-x509-ca-cert .dgn application/x-dgn
    .dib application/x-dib .dll application/x-msdownload
    .doc application/msword .dot application/msword
    .drw application/x-drw .dtd text/xml
    .dwf Model/vnd.dwf .dwf application/x-dwf
    .dwg application/x-dwg .dxb application/x-dxb
    .dxf application/x-dxf .edn application/vnd.adobe.edn
    .emf application/x-emf .eml message/rfc822
    .ent text/xml .epi application/x-epi
    .eps application/x-ps .eps application/postscript
    .etd application/x-ebx .exe application/x-msdownload
    .fax image/fax .fdf application/vnd.fdf
    .fif application/fractals .fo text/xml
    .frm application/x-frm .g4 application/x-g4
    .gbr application/x-gbr . application/x-
    .gif image/gif .gl2 application/x-gl2
    .gp4 application/x-gp4 .hgl application/x-hgl
    .hmr application/x-hmr .hpg application/x-hpgl
    .hpl application/x-hpl .hqx application/mac-binhex40
    .hrf application/x-hrf .hta application/hta
    .htc text/x-component .htm text/html
    .html text/html .htt text/webviewhtml
    .htx text/html .icb application/x-icb
    .ico image/x-icon .ico application/x-ico
    .iff application/x-iff .ig4 application/x-g4
    .igs application/x-igs .iii application/x-iphone
    .img application/x-img .ins application/x-internet-signup
    .isp application/x-internet-signup .IVF video/x-ivf
    .java java/* .jfif image/jpeg
    .jpe image/jpeg .jpe application/x-jpe
    .jpeg image/jpeg .jpg image/jpeg
    .jpg application/x-jpg .js application/x-javascript
    .jsp text/html .la1 audio/x-liquid-file
    .lar application/x-laplayer-reg .latex application/x-latex
    .lavs audio/x-liquid-secure .lbm application/x-lbm
    .lmsff audio/x-la-lms .ls application/x-javascript
    .ltr application/x-ltr .m1v video/x-mpeg
    .m2v video/x-mpeg .m3u audio/mpegurl
    .m4e video/mpeg4 .mac application/x-mac
    .man application/x-troff-man .math text/xml
    .mdb application/msaccess .mdb application/x-mdb
    .mfp application/x-shockwave-flash .mht message/rfc822
    .mhtml message/rfc822 .mi application/x-mi
    .mid audio/mid .midi audio/mid
    .mil application/x-mil .mml text/xml
    .mnd audio/x-musicnet-download .mns audio/x-musicnet-stream
    .mocha application/x-javascript .movie video/x-sgi-movie
    .mp1 audio/mp1 .mp2 audio/mp2
    .mp2v video/mpeg .mp3 audio/mp3
    .mp4 video/mpeg4 .mpa video/x-mpg
    .mpd application/vnd.ms-project .mpe video/x-mpeg
    .mpeg video/mpg .mpg video/mpg
    .mpga audio/rn-mpeg .mpp application/vnd.ms-project
    .mps video/x-mpeg .mpt application/vnd.ms-project
    .mpv video/mpg .mpv2 video/mpeg
    .mpw application/vnd.ms-project .mpx application/vnd.ms-project
    .mtx text/xml .mxp application/x-mmxp
    .net image/pnetvue .nrf application/x-nrf
    .nws message/rfc822 .odc text/x-ms-odc
    .out application/x-out .p10 application/pkcs10
    .p12 application/x-pkcs12 .p7b application/x-pkcs7-certificates
    .p7c application/pkcs7-mime .p7m application/pkcs7-mime
    .p7r application/x-pkcs7-certreqresp .p7s application/pkcs7-signature
    .pc5 application/x-pc5 .pci application/x-pci
    .pcl application/x-pcl .pcx application/x-pcx
    .pdf application/pdf .pdf application/pdf
    .pdx application/vnd.adobe.pdx .pfx application/x-pkcs12
    .pgl application/x-pgl .pic application/x-pic
    .pko application/vnd.ms-pki.pko .pl application/x-perl
    .plg text/html .pls audio/scpls
    .plt application/x-plt .png image/png
    .png application/x-png .pot application/vnd.ms-powerpoint
    .ppa application/vnd.ms-powerpoint .ppm application/x-ppm
    .pps application/vnd.ms-powerpoint .ppt application/vnd.ms-powerpoint
    .ppt application/x-ppt .pr application/x-pr
    .prf application/pics-rules .prn application/x-prn
    .prt application/x-prt .ps application/x-ps
    .ps application/postscript .ptn application/x-ptn
    .pwz application/vnd.ms-powerpoint .r3t text/vnd.rn-realtext3d
    .ra audio/vnd.rn-realaudio .ram audio/x-pn-realaudio
    .ras application/x-ras .rat application/rat-file
    .rdf text/xml .rec application/vnd.rn-recording
    .red application/x-red .rgb application/x-rgb
    .rjs application/vnd.rn-realsystem-rjs .rjt application/vnd.rn-realsystem-rjt
    .rlc application/x-rlc .rle application/x-rle
    .rm application/vnd.rn-realmedia .rmf application/vnd.adobe.rmf
    .rmi audio/mid .rmj application/vnd.rn-realsystem-rmj
    .rmm audio/x-pn-realaudio .rmp application/vnd.rn-rn_music_package
    .rms application/vnd.rn-realmedia-secure .rmvb application/vnd.rn-realmedia-vbr
    .rmx application/vnd.rn-realsystem-rmx .rnx application/vnd.rn-realplayer
    .rp image/vnd.rn-realpix .rpm audio/x-pn-realaudio-plugin
    .rsml application/vnd.rn-rsml .rt text/vnd.rn-realtext
    .rtf application/msword .rtf application/x-rtf
    .rv video/vnd.rn-realvideo .sam application/x-sam
    .sat application/x-sat .sdp application/sdp
    .sdw application/x-sdw .sit application/x-stuffit
    .slb application/x-slb .sld application/x-sld
    .slk drawing/x-slk .smi application/smil
    .smil application/smil .smk application/x-smk
    .snd audio/basic .sol text/plain
    .sor text/plain .spc application/x-pkcs7-certificates
    .spl application/futuresplash .spp text/xml
    .ssm application/streamingmedia .sst application/vnd.ms-pki.certstore
    .stl application/vnd.ms-pki.stl .stm text/html
    .sty application/x-sty .svg text/xml
    .swf application/x-shockwave-flash .tdf application/x-tdf
    .tg4 application/x-tg4 .tga application/x-tga
    .tif image/tiff .tif application/x-tif
    .tiff image/tiff .tld text/xml
    .top drawing/x-top .torrent application/x-bittorrent
    .tsd text/xml .txt text/plain
    .uin application/x-icq .uls text/iuls
    .vcf text/x-vcard .vda application/x-vda
    .vdx application/vnd.visio .vml text/xml
    .vpg application/x-vpeg005 .vsd application/vnd.visio
    .vsd application/x-vsd .vss application/vnd.visio
    .vst application/vnd.visio .vst application/x-vst
    .vsw application/vnd.visio .vsx application/vnd.visio
    .vtx application/vnd.visio .vxml text/xml
    .wav audio/wav .wax audio/x-ms-wax
    .wb1 application/x-wb1 .wb2 application/x-wb2
    .wb3 application/x-wb3 .wbmp image/vnd.wap.wbmp
    .wiz application/msword .wk3 application/x-wk3
    .wk4 application/x-wk4 .wkq application/x-wkq
    .wks application/x-wks .wm video/x-ms-wm
    .wma audio/x-ms-wma .wmd application/x-ms-wmd
    .wmf application/x-wmf .wml text/vnd.wap.wml
    .wmv video/x-ms-wmv .wmx video/x-ms-wmx
    .wmz application/x-ms-wmz .wp6 application/x-wp6
    .wpd application/x-wpd .wpg application/x-wpg
    .wpl application/vnd.ms-wpl .wq1 application/x-wq1
    .wr1 application/x-wr1 .wri application/x-wri
    .wrk application/x-wrk .ws application/x-ws
    .ws2 application/x-ws .wsc text/scriptlet
    .wsdl text/xml .wvx video/x-ms-wvx
    .xdp application/vnd.adobe.xdp .xdr text/xml
    .xfd application/vnd.adobe.xfd .xfdf application/vnd.adobe.xfdf
    .xhtml text/html .xls application/vnd.ms-excel
    .xls application/x-xls .xlw application/x-xlw
    .xml text/xml .xpl audio/scpls
    .xq text/xml .xql text/xml
    .xquery text/xml .xsd text/xml
    .xsl text/xml .xslt text/xml
    .xwd application/x-xwd .x_b application/x-x_b
    .sis application/vnd.symbian.install .sisx application/vnd.symbian.install
    .x_t application/x-x_t .ipa application/vnd.iphone
    .apk application/vnd.android.package-archive .xap application/x-silverlight-app

    二、四种常见的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 进行数据交互之后,我们完全可以定义新的数据提交方式,给开发带来更多便利。

     可以看到里面有一个boundary分界,值为:WebKit.......62,请求时,会放在Content-Type后面传到服务器,服务器根据这个边界解析数据,划分段,每一段都是一项数据。每一项中的name属性就是唯一的id

     4、text/xml 

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

    XML-RPC(XML Remote Procedure Call)。它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的: 

    POST http://www.example.com HTTP/1.1 
    Content-Type: text/xml 

    <!--?xml version="1.0"?--> 
    <methodcall> 
        <methodname>examples.getStateName</methodname> 
        <params> 
            <param> 
                <value><i4>41</i4></value> 
             
        </params> 
    </methodcall> 
    XML-RPC 协议简单、功能够用,各种语言的实现都有。它的使用也很广泛,如 WordPress 的 XML-RPC Api,搜索引擎的 ping 服务等等。JavaScript 中,也有现成的库支持以这种方式进行数据交互,能很好的支持已有的 XML-RPC 服务。不过,我个人觉得 XML 结构还是过于臃肿,一般场景用 JSON 会更灵活方便。 

    5、application/xml and text/xml的区别

    二者功能一模一样,唯一的区别就是编码格式,text/xml忽略xml头所指定编码格式而默认采用us-ascii编码,而application/xml会根据xml头指定的编码格式来编码:

    例子1:

     webservice传输的文件

    Xml代码 复制代码 收藏代码
    1. Content-type: application/xml; charset="utf-16"  
    2.   {BOM}<?xml version="1.0"?>   
    Xml代码  收藏代码
    1. Content-type: application/xml; charset="utf-16"  
    2.   {BOM}<?xml version="1.0"?>   

    XML and MIME processors会按照utf-16编码处理该文件

     

    例子2:

     webservice传输的文件

    Xml代码 复制代码 收藏代码
    1. Content-type: application/xml   
    2.    <?xml version='1.0'?>  
    Xml代码  收藏代码
    1. Content-type: application/xml  
    2.    <?xml version='1.0'?>  

    XML processors会按照utf-8编码处理该文件

     

    例子3:

     webservice传输的文件

    Xml代码 复制代码 收藏代码
    1. Content-type: application/xml   
    2.    <?xml version='1.0' encoding="ISO-10646-UCS-4"?>  
    Xml代码  收藏代码
    1. Content-type: application/xml  
    2.    <?xml version='1.0' encoding="ISO-10646-UCS-4"?>  

     XML processors会按照UCS-4编码处理该文件
     

    例子4:

     webservice传输的文件

    Xml代码 复制代码 收藏代码
    1. Content-type: text/xml   
    2.    {BOM}<?xml version="1.0" encoding="utf-16"?>  
    Xml代码  收藏代码
    1. Content-type: text/xml  
    2.    {BOM}<?xml version="1.0" encoding="utf-16"?>  

     XML processors会按照us-ascii,而不是utf-16编码处理该文件

    参考:

    https://www.runoob.com/http/http-content-type.html

    https://www.cnblogs.com/wxh0929/p/11130464.html

    https://blog.csdn.net/u014209205/article/details/81147783

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

    https://www.cnblogs.com/mkl34367803/p/8477624.html

    application/xml and text/xml的区别

  • 相关阅读:
    认识Linux
    Java之安装环境
    Markdown学习
    使用cacti监控linux server的接口流量
    IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器
    网络编程--练习题
    linux搭建ntp服务器-添加交换机客户端,windows客户端
    linux centos7搭建redis-5.0.5
    linux centos7搭建mysql-5.7.29
    对称加密与非对称加密
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/13228942.html
Copyright © 2020-2023  润新知