# This file controls what Internet media types are sent to the client for
# given file extension(s). Sending the correct media type to the client
# is important so they know how to handle the content of the file.
# Extra types can either be added here or by using an AddType directive
# in your config files. For more information about Internet media types,
# please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type
# registry is at <http://www.iana.org/assignments/media-types/>.

# MIME type                              Extensions

application/andrew-inset                 ez
application/atom+xml                     atom
application/java-archive                 jar
application/mac-binhex40                 hqx
application/mac-compactpro               cpt
application/mathml+xml                   mathml
application/msword                       doc
application/octet-stream                 bin dms lha lzh exe class so dll dmg
application/oda                          oda
application/ogg                          ogg
application/pdf                          pdf
application/pgp-encrypted                pgp
application/postscript                   ai eps ps
application/rdf+xml                      rdf
application/smil                         smi smil
application/srgs                         gram
application/srgs+xml                     grxml
application/vnd.mif                      mif
application/vnd.mozilla.xul+xml          xul
application/vnd.ms-excel                 xls
application/vnd.ms-powerpoint            ppt
application/vnd.rn-realmedia             rm
application/vnd.wap.wbxml                wbxml
application/vnd.wap.wmlc                 wmlc
application/vnd.wap.wmlscriptc           wmlsc
application/voicexml+xml                 vxml
application/x-bcpio                      bcpio
application/x-cdlink                     vcd
application/x-chess-pgn                  pgn
application/x-cpio                       cpio
application/x-csh                        csh
application/x-director                   dcr dir dxr
application/x-dvi                        dvi
application/x-futuresplash               spl
application/x-gtar                       gtar
application/x-hdf                        hdf
application/x-java-jnlp-file             jnlp
application/x-javascript                 js
application/x-koan                       skp skd skt skm
application/x-latex                      latex
application/x-netcdf                     nc cdf
application/x-sh                         sh
application/x-shar                       shar
application/x-shockwave-flash            swf
application/x-stuffit                    sit
application/x-sv4cpio                    sv4cpio
application/x-sv4crc                     sv4crc
application/x-tar                        tar
application/x-tcl                        tcl
application/x-tex                        tex
application/x-texinfo                    texinfo texi
application/x-troff                      t tr roff
application/x-troff-man                  man
application/x-troff-me                   me
application/x-troff-ms                   ms
application/x-ustar                      ustar
application/x-wais-source                src
application/xhtml+xml                    xhtml xht
application/xml                          xml xsl pom
application/xml-dtd                      dtd
application/xslt+xml                     xslt
application/zip                          zip
audio/basic                              au snd
audio/midi                               mid midi kar
audio/mpeg                               mpga mp2 mp3
audio/x-aiff                             aif aiff aifc
audio/x-mpegurl                          m3u
audio/x-pn-realaudio                     ram ra
audio/x-wav                              wav
chemical/x-pdb                           pdb
chemical/x-xyz                           xyz
image/bmp                                bmp
image/cgm                                cgm
image/gif                                gif
image/ief                                ief
image/jp2                                jp2
image/jpeg                               jpeg jpg jpe
image/pict                               pict pic pct
image/png                                png
image/svg+xml                            svg
image/tiff                               tiff tif
image/vnd.djvu                           djvu djv
image/vnd.wap.wbmp                       wbmp
image/x-cmu-raster                       ras
image/x-icon                             ico
image/x-macpaint                         pntg pnt mac
image/x-portable-anymap                  pnm
image/x-portable-bitmap                  pbm
image/x-portable-graymap                 pgm
image/x-portable-pixmap                  ppm
image/x-quicktime                        qtif qti
image/x-rgb                              rgb
image/x-xbitmap                          xbm
image/x-xpixmap                          xpm
image/x-xwindowdump                      xwd
model/iges                               igs iges
model/mesh                               msh mesh silo
model/vrml                               wrl vrml
text/calendar                            ics ifb
text/css                                 css
text/html                                html htm
text/plain                               asc txt sha1 md5
text/richtext                            rtx
text/rtf                                 rtf
text/sgml                                sgml sgm
text/tab-separated-values                tsv
text/vnd.wap.wml                         wml
text/vnd.wap.wmlscript                   wmls
text/x-setext                            etx
video/mp4                                mp4
video/mpeg                               mpeg mpg mpe
video/quicktime                          qt mov
video/vnd.mpegurl                        mxu m4u
video/x-dv                               dv dif
video/x-msvideo                          avi
video/x-sgi-movie                        movie
x-conference/x-cooltalk                  ice
