Media Type 媒体类型(MIME Type、Content Type)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Media Type 媒体类型(MIME Type、Content Type)相关的知识,希望对你有一定的参考价值。
参考技术A媒体类型用于声明随之而来的数据的格式。又称:MIME类型、MIME Type、Content Type。 是一种用于在异构系统、分布式网络之间声明并传递信息主体格式的方法。
一般的,在文件系统中,我们会使用扩展名来表示文件类型,例如: .exe 表示可执行文件、 .txt 表示纯文本文件、 .png 表示png编码的图片、 .mp4 表示mp4视频。这种方法,在独立系统中运行的很好。但在网络传输中并不是一个好的方法。首先扩展名并不权威,不同系统之间是有歧义的。其次扩展名的惯例是采用缩写的方式,不能准确表意。为了便于在网络中准确传递内容类型,多方组织制定出媒体类型表示方法和注册规程(Media Type Specifications and Registration Procedures : rfc6838 )。 这种方法最初用于电子邮件(MIME)的,故也称之为 MIME Type。
Media Type 的类型声明由2部分组成:大类/子类。 在册大类有10个,经常用到的 大类 有6个:text、image、audio、video、application,multipart。 子类 总计有近2000+种。
multipart大类指复合类型。表示随后的数据是由多个不同media type 的块组成,每个块可以有单独的media type声明。
对子类型要注意一点,子类声明时可以附加结构说明后缀(Structured Syntax Name Suffixes, rfc6838 4.2.8 )。例如: application/soap+xml 表示W3C Web Service报文,报文采用xml语法; application/calendar+xml 表示采用xml语法承载的icalendar报文; application/calendar+json 表示用json语法承载的icalendar报文。
主要注意的是,media type 并不仅仅能表示唯一确定类型。在网络协商时,media type支持传递通配符。 */* 表示任意类型, text/* 表示文本大类。因此,在程序中不能简单对mime type进行字符串比较。你需要考虑通配符的场景。
在实际传递媒体类型时,可以在媒体类型后面附加参数: 大类/子类;参数1=值1;……;参数n=值n 。例如: text/plain;charset=utf-8;bom=no
看到这儿你会发现对于处理 http报文头中的content-type,不能简单按照字符等于来判断,也不能简单将字符串用 / 来分割成大类子类。一个完整的mime type解析要能正确识别大类、子类、语法后缀、通配符、参数。 你可以参考: org.springframework.util.MimeTypeUtils.parseMimeTypeInternal(String) 或 javax.activation.MimeType.MimeType(String)
以上是关于Media Type 媒体类型(MIME Type、Content Type)的主要内容,如果未能解决你的问题,请参考以下文章
媒体投影需要 Android Pie 和 Q 中类型为 ServiceInfo.FOREGROUND_SERVICE TYPE_MEDIA_PROJECTION 的前台服务