天天看點

http中的Content-Type

要學習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

pdf

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:

繼續閱讀