要学习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" rn", 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,

Content type的说明即HTTP请求头的类型整理