要學習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。
part 2: media types 。
常用類型:
mime types by file extension
extension
type/sub-type
application/octet-stream
323
text/h323
acx
application/internet-property-stream
ai
application/postscript
aif
audio/x-aiff
aifc
aiff
asf
video/x-ms-asf
asr
asx
au
audio/basic
avi
video/x-msvideo
axs
application/olescript
bas
text/plain
bcpio
application/x-bcpio
bin
bmp
image/bmp
c
cat
application/vnd.ms-pkiseccat
cdf
application/x-cdf
cer
application/x-x509-ca-cert
class
clp
application/x-msclip
cmx
image/x-cmx
cod
image/cis-cod
cpio
application/x-cpio
crd
application/x-mscardfile
crl
application/pkix-crl
crt
csh
application/x-csh
css
text/css
dcr
application/x-director
der
dir
dll
application/x-msdownload
dms
doc
application/msword
dot
dvi
application/x-dvi
dxr
eps
etx
text/x-setext
evy
application/envoy
exe
fif
application/fractals
flr
x-world/x-vrml
gif
image/gif
gtar
application/x-gtar
gz
application/x-gzip
h
hdf
application/x-hdf
hlp
application/winhlp
hqx
application/mac-binhex40
hta
application/hta
htc
text/x-component
htm
text/html
html
htt
text/webviewhtml
ico
image/x-icon
ief
image/ief
iii
application/x-iphone
ins
application/x-internet-signup
isp
jfif
image/pipeg
jpe
image/jpeg
jpeg
jpg
js
application/x-javascript
latex
application/x-latex
lha
lsf
video/x-la-asf
lsx
lzh
m13
application/x-msmediaview
m14
m3u
audio/x-mpegurl
man
application/x-troff-man
mdb
application/x-msaccess
me
application/x-troff-me
mht
message/rfc822
mhtml
mid
audio/mid
mny
application/x-msmoney
mov
video/quicktime
movie
video/x-sgi-movie
mp2
video/mpeg
mp3
audio/mpeg
mpa
mpe
mpeg
mpg
mpp
application/vnd.ms-project
mpv2
ms
application/x-troff-ms
mvb
nws
oda
application/oda
p10
application/pkcs10
p12
application/x-pkcs12
p7b
application/x-pkcs7-certificates
p7c
application/x-pkcs7-mime
p7m
p7r
application/x-pkcs7-certreqresp
p7s
application/x-pkcs7-signature
pbm
image/x-portable-bitmap
application/pdf
pfx
pgm
image/x-portable-graymap
pko
application/ynd.ms-pkipko
pma
application/x-perfmon
pmc
pml
pmr
pmw
pnm
image/x-portable-anymap
pot,
application/vnd.ms-powerpoint
ppm
image/x-portable-pixmap
pps
ppt
prf
application/pics-rules
ps
pub
application/x-mspublisher
qt
ra
audio/x-pn-realaudio
ram
ras
image/x-cmu-raster
rgb
image/x-rgb
rmi
roff
application/x-troff
rtf
application/rtf
rtx
text/richtext
scd
application/x-msschedule
sct
text/scriptlet
setpay
application/set-payment-initiation
setreg
application/set-registration-initiation
sh
application/x-sh
shar
application/x-shar
sit
application/x-stuffit
snd
spc
spl
application/futuresplash
src
application/x-wais-source
sst
application/vnd.ms-pkicertstore
stl
application/vnd.ms-pkistl
stm
svg
image/svg+xml
sv4cpio
application/x-sv4cpio
sv4crc
application/x-sv4crc
swf
application/x-shockwave-flash
t
tar
application/x-tar
tcl
application/x-tcl
tex
application/x-tex
texi
application/x-texinfo
texinfo
tgz
application/x-compressed
tif
image/tiff
tiff
tr
trm
application/x-msterminal
tsv
text/tab-separated-values
txt
uls
text/iuls
ustar
application/x-ustar
vcf
text/x-vcard
vrml
wav
audio/x-wav
wcm
application/vnd.ms-works
wdb
wks
wmf
application/x-msmetafile
wps
wri
application/x-mswrite
wrl
wrz
xaf
xbm
image/x-xbitmap
xla
application/vnd.ms-excel
xlc
xlm
xls
xlt
xlw
xof
xpm
image/x-xpixmap
xwd
image/x-xwindowdump
z
application/x-compress
zip
application/zip
對于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等原來在網頁中打開的檔案都可以正常實作下載下傳。
reference: