要學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'=> '應用程式/後記',
'ps' =>; '應用程式/postscript',
'smi' =>; '應用程式/微笑',
'微笑' =>; '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',
'我' =>; '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' =>; '應用程式/zip',
'au' =>; '音頻/基本',
'snd' => '音頻/基本',
'mid' => '音頻/midi',
'midi' => '音頻/midi',
'卡爾'=>; '音訊/midi',
'mpga' => '音訊/mpeg',
'mp2' => '音訊/mpeg',
'mp3' => '音訊/mpeg',
'aif' => '音頻/x-aiff',
'aiff' =>; '音頻/x-aiff',
'aifc' =>; '音頻/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' =>; '音頻/x-wav',
'pdb' =>; 'chemical/x-pdb',
'xyz' =>; 'chemical/x-xyz',
'bmp' =>; '圖片/bmp',
'gif' => '圖片/gif',
'ief' => '圖片/ief',
'jpeg' =>; '圖片/jpeg',
'jpg' =>; '圖片/jpeg',
'jpe' =>; '圖片/jpeg',
'png' =>; '圖片/png',
'tiff' =>; '圖像/tiff',
'tif' => '圖像/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' =>; '圖像/x-x點陣圖',
'xpm' =>; 'image/x-xpixmap',
'xwd' =>; 'image/x-xwindowdump',
'igs' =>; '模型/iges',
'iges' => '模型/iges',
'msh' =>; '模型/網格',
'網格' => '模型/網格',
'筒倉' =>; '模型/網格',
'wrl' =>; '模型/vrml',
'vrml' =>; '模型/vrml',
'css' =>; 'text/css',
'html' =>; 'text/html',
'htm' =>; 'text/html',
'asc' =>; '文字/純文字',
'txt' =>; 'text/plain',
'rtx' =>; 'text/richtext',
'rtf' =>; 'text/rtf',
'sgml' =>; 'text/sgml',
'sgm' =>; 'text/sgml',
'tsv' =>; '文字/製表符分隔值',
'wml' =>; 'text/vnd.wap.wml',
'wmls' =>; 'text/vnd.wap.wmlscript',
'etx' =>; 'text/x-setext',
'xsl' =>; 'text/xml',
'xml' =>; 'text/xml',
'mpeg' =>; '視訊/mpeg',
'mpg' =>; '影片/mpeg',
'mpe' =>; '視訊/mpeg',
'qt'=> '影片/quicktime',
'mov' =>; '影片/quicktime',
'mxu' =>; 'video/vnd.mpegurl',
'avi' = >; 'video/x-msvideo',
'電影' =>; 'video/x-sgi-movie',
'ice' =>; 'x-conference/x-cooltalk',