HTTP Content-Type 类型整理

    HTTP协议(RFC2616)采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以 及可能的实体内容。 

    通常HTTP消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域 值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。 

    请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。 

    Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容。

type有下面的形式 

Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的; 
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据; 
Application:用于传输应用程序数据或者二进制数据; 
Message:用于包装一个E-mail消息; 
Image:用于传输静态图片数据; 
Audio:用于传输音频或者音声数据; 
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。 

subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。 

parameter可以用来指定附加的信息,更多情况下是用于指定text/plain和text/htm等的文字编码方式的charset参数。MIME根据type制定了默认的subtype,当客户端不能确定消息的subtype的情况下,消息被看作默认的subtype进行处理。Text默认是text/plain,Application默认是application/octet-stream而Multipart默认情况下被看作multipart/mixed。对于IE6浏览器来说,如果Content-Type中的类型和实际的消息体类型不一致,那么它会根据内容中的类型来分析实际应该是什么类型,对于JPG、GIF等常用图片格式都可以正确的识别出来,而不管Content-Type中写的是什么。 

如果Content-Type中指定的是浏览器可以直接打开的类型,那么浏览器就会直接打开其内容显示出来,如果是被关联到其它应用程序的类型,这时就要查找注册表中关于这种类型的注册情况,如果是允许直接打开而不需要询问的,就会直接调出这个关联的应用程序来打开这个文件,但如果是不允许直接打开的,就会询问是否打开。对于没有关联到任何应用程序的类型,IE浏览器不知道它该如何打开,此时IE6就会把它当成XML来尝试打开。

如果要想实现文件下载,可以在http的头中加入: 
fprintf(file, "Content-Disposition:attachment; filename=\"%s\" \r\n", fileName); 

经过测试,html,pdf,gif等原来在网页中打开的文件都可以正常实现下载。 

'hqx' => 'application/mac-binhex40', 
'cpt' => 'application/mac-compactpro', 
'doc' => 'application/msword', 
'bin' => 'application/octet-stream', 
'dms' => 'application/octet-stream', 
'lha' => 'application/octet-stream', 
'lzh' => 'application/octet-stream', 
'exe' => 'application/octet-stream', 
'class' => 'application/octet-stream', 
'so' => 'application/octet-stream', 
'dll' => 'application/octet-stream', 
'oda' => 'application/oda', 
'pdf' => 'application/pdf', 
'ai' => 'application/postscript', 
'eps' => 'application/postscript', 
'ps' => 'application/postscript', 
'smi' => 'application/smil', 
'smil' => 'application/smil', 
'mif' => 'application/vnd.mif', 
'xls' => 'application/vnd.ms-excel', 
'ppt' => 'application/vnd.ms-powerpoint', 
'wbxml' => 'application/vnd.wap.wbxml', 
'wmlc' => 'application/vnd.wap.wmlc', 
'wmlsc' => 'application/vnd.wap.wmlscriptc', 
'bcpio' => 'application/x-bcpio', 
'vcd' => 'application/x-cdlink', 
'pgn' => 'application/x-chess-pgn', 
'cpio' => 'application/x-cpio', 
'csh' => 'application/x-csh', 
'dcr' => 'application/x-director', 
'dir' => 'application/x-director', 
'dxr' => 'application/x-director', 
'dvi' => 'application/x-dvi', 
'spl' => 'application/x-futuresplash', 
'gtar' => 'application/x-gtar', 
'hdf' => 'application/x-hdf', 
'js' => 'application/x-javascript', 
'skp' => 'application/x-koan', 
'skd' => 'application/x-koan', 
'skt' => 'application/x-koan', 
'skm' => 'application/x-koan', 
'latex' => 'application/x-latex', 
'nc' => 'application/x-netcdf', 
'cdf' => 'application/x-netcdf', 
'sh' => 'application/x-sh', 
'shar' => 'application/x-shar', 
'swf' => 'application/x-shockwave-flash', 
'sit' => 'application/x-stuffit', 
'sv4cpio' => 'application/x-sv4cpio', 
'sv4crc' => 'application/x-sv4crc', 
'tar' => 'application/x-tar', 
'tcl' => 'application/x-tcl', 
'tex' => 'application/x-tex', 
'texinfo' => 'application/x-texinfo', 
'texi' => 'application/x-texinfo', 
't' => 'application/x-troff', 
'tr' => 'application/x-troff', 
'roff' => 'application/x-troff', 
'man' => 'application/x-troff-man', 
'me' => 'application/x-troff-me', 
'ms' => 'application/x-troff-ms', 
'ustar' => 'application/x-ustar', 
'src' => 'application/x-wais-source', 
'xhtml' => 'application/xhtml+xml', 
'xht' => 'application/xhtml+xml', 
'zip' => 'application/zip', 
'au' => 'audio/basic', 
'snd' => 'audio/basic', 
'mid' => 'audio/midi', 
'midi' => 'audio/midi', 
'kar' => 'audio/midi', 
'mpga' => 'audio/mpeg', 
'mp2' => 'audio/mpeg', 
'mp3' => 'audio/mpeg', 
'aif' => 'audio/x-aiff', 
'aiff' => 'audio/x-aiff', 
'aifc' => 'audio/x-aiff', 
'm3u' => 'audio/x-mpegurl', 
'ram' => 'audio/x-pn-realaudio', 
'rm' => 'audio/x-pn-realaudio', 
'rpm' => 'audio/x-pn-realaudio-plugin', 
'ra' => 'audio/x-realaudio', 
'wav' => 'audio/x-wav', 
'pdb' => 'chemical/x-pdb', 
'xyz' => 'chemical/x-xyz', 
'bmp' => 'image/bmp', 
'gif' => 'image/gif', 
'ief' => 'image/ief', 
'jpeg' => 'image/jpeg', 
'jpg' => 'image/jpeg', 
'jpe' => 'image/jpeg', 
'png' => 'image/png', 
'tiff' => 'image/tiff', 
'tif' => 'image/tiff', 
'djvu' => 'image/vnd.djvu', 
'djv' => 'image/vnd.djvu', 
'wbmp' => 'image/vnd.wap.wbmp', 
'ras' => 'image/x-cmu-raster', 
'pnm' => 'image/x-portable-anymap', 
'pbm' => 'image/x-portable-bitmap', 
'pgm' => 'image/x-portable-graymap', 
'ppm' => 'image/x-portable-pixmap', 
'rgb' => 'image/x-rgb', 
'xbm' => 'image/x-xbitmap', 
'xpm' => 'image/x-xpixmap', 
'xwd' => 'image/x-xwindowdump', 
'igs' => 'model/iges', 
'iges' => 'model/iges', 
'msh' => 'model/mesh', 
'mesh' => 'model/mesh', 
'silo' => 'model/mesh', 
'wrl' => 'model/vrml', 
'vrml' => 'model/vrml', 
'css' => 'text/css', 
'html' => 'text/html', 
'htm' => 'text/html', 
'asc' => 'text/plain', 
'txt' => 'text/plain', 
'rtx' => 'text/richtext', 
'rtf' => 'text/rtf', 
'sgml' => 'text/sgml', 
'sgm' => 'text/sgml', 
'tsv' => 'text/tab-separated-values', 
'wml' => 'text/vnd.wap.wml', 
'wmls' => 'text/vnd.wap.wmlscript', 
'etx' => 'text/x-setext', 
'xsl' => 'text/xml', 
'xml' => 'text/xml', 
'mpeg' => 'video/mpeg', 
'mpg' => 'video/mpeg', 
'mpe' => 'video/mpeg', 
'qt' => 'video/quicktime', 
'mov' => 'video/quicktime', 
'mxu' => 'video/vnd.mpegurl', 
'avi' => 'video/x-msvideo', 
'movie' => 'video/x-sgi-movie', 
'ice' => 'x-conference/x-cooltalk',

转载于:https://my.oschina.net/webxiaohua/blog/396909

<think>我们被要求回答关于HTTP Content-Type常见值及其用途的问题。根据提供的引用,我们可以总结如下: 引用[1]提到四种常用的Content-Type,特别是application/x-www-form-urlencoded。 引用[2]列举了常见的Content-Type类型,包括text/plain、text/html、application/json等,并说明了它们的作用。 引用[3]说明Content-TypeHTTP请求和响应中的使用,特别是在Spring框架中的使用(如@RequestMapping注解的consumes和produces属性)。 引用[4]详细介绍了三种常见的Content-Type:application/x-www-form-urlencoded、multipart/form-data和application/json,并提到了它们的历史背景。 引用[5]则更全面地列出了常见的Content-Type,并按照文本、图片、应用程序、媒体文件等分类。 根据这些引用,我们可以整理出常见的Content-Type值及其用途: 1. **文本类型**: - `text/plain`:纯文本格式,不含任何格式化元素。 - `text/html`:HTML格式,用于发送HTML文档。 - `text/css`:CSS样式表。 - `text/xml`:XML格式,用于传输XML数据。 2. **应用程序类型**: - `application/json`:JSON数据格式,广泛用于API交互。 - `application/xml`:XML数据格式,用于传输结构化的数据。 - `application/xhtml+xml`:XHTML格式,结合了HTML和XML的特性。 - `application/pdf`:PDF文档格式。 - `application/msword`:Microsoft Word文档格式。 - `application/octet-stream`:二进制流数据,常用于文件下载- `application/x-www-form-urlencoded`:表单默认的提交数据格式,将表单数据编码为键值对(key1=value1&key2=value2)。 - `multipart/form-data`:用于表单中包含文件上传的情况,将表单数据分割成多个部分(part),每部分对应一个表单控件。 3. **图片类型**: - `image/jpeg`:JPEG图像格式。 - `image/png`:PNG图像格式。 - `image/gif`:GIF图像格式。 4. **音频/视频类型**: - `audio/mpeg`:MP3音频格式。 - `audio/x-wav`:WAV音频格式。 - `video/mp4`:MP4视频格式。 - `video/avi`:AVI视频格式。 5. **其他**: - `multipart/byteranges`:用于断点续传,表示响应包含多个字节范围。 关于Content-Type的作用,引用[2]提到,Content-Type用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。在请求中,它告诉服务器客户端发送的数据类型;在响应中,它告诉客户端返回的数据类型,以便客户端正确解析。 现在,我们可以按照这些信息来组织答案。</think>### HTTP Content-Type 常见值及其用途详解 Content-TypeHTTP 协议中的关键头部字段,用于定义请求/响应体的数据类型和编码格式。以下是常见类型及其应用场景: #### 一、文本类格式 | Content-Type 值 | 用途说明 | 示例场景 | |-------------------------|--------------------------------------------------------------------------|-----------------------------| | `text/plain` | 纯文本格式(无格式标记) | API返回简单状态信息 | | `text/html` | HTML文档格式 | 网页渲染 | | `text/css` | CSS样式表 | 浏览器加载样式文件 | | `text/javascript` | JavaScript代码 | 前端脚本加载 | | `text/xml` | XML数据格式 | SOAP接口通信 | | `text/csv` | 逗号分隔值格式 | 数据报表导出 | #### 二、应用数据类格式 | Content-Type 值 | 用途说明 | 示例场景 | |----------------------------------|--------------------------------------------------------------------------|-----------------------------| | `application/json` | JSON结构化数据 | RESTful API 数据交互 | | `application/xml` | XML结构化数据 | 企业级系统接口 | | `application/pdf` | PDF文档格式 | 文件下载 | | `application/zip` | ZIP压缩包 | 批量文件下载 | | `application/x-www-form-urlencoded` | **表单默认提交格式**(键值对编码) | HTML表单提交 | | `multipart/form-data` | **含文件上传的表单**(二进制数据支持) | 用户头像上传表单 | | `application/octet-stream` | 原始二进制流 | 文件下载/未知类型文件传输 | #### 三、媒体类格式 | Content-Type 值 | 用途说明 | 常见扩展名 | |-----------------------|------------------------------|-----------------| | `image/jpeg` | JPEG图像格式 | .jpg/.jpeg | | `image/png` | PNG图像格式 | .png | | `image/gif` | GIF动图格式 | .gif | | `audio/mpeg` | MP3音频格式 | .mp3 | | `video/mp4` | MP4视频格式 | .mp4 | | `application/msword` | Word文档格式 | .doc/.docx | #### 四、特殊用途格式 | Content-Type 值 | 用途说明 | |-----------------------------|--------------------------------------------------------------------------| | `multipart/byteranges` | 分段传输(用于断点续传) | | `application/x-protobuf` | Protocol Buffers二进制协议 | | `application/grpc` | gRPC框架通信 | ### 核心作用解析 1. **请求控制**: 客户端通过`Content-Type`声明请求体格式(如POST请求),服务器据此解析参数: ```http POST /api/user HTTP/1.1 Content-Type: application/json {"name": "John", "age": 30} ``` 2. **响应处理**: 服务器通过`Content-Type`告知客户端如何解析响应体: ```http HTTP/1.1 200 OK Content-Type: application/json {"status": "success", "data": [...]} ``` 3. **安全控制**: 浏览器根据Content-Type执行不同安全策略,如: - `text/html`触发HTML解析 - `application/octet-stream`触发文件下载 > **选择原则**: > - 表单提交优先用`application/x-www-form-urlencoded` > - 含文件上传必须用`multipart/form-data` > - API交互首选`application/json` > - 文件传输用`application/octet-stream`[^4][^5] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值