MIME Types – Free, Online, Private
MIME types for common file extensions, with the Content-Type header, nginx, Apache, and Express snippets, and the mistakes that make browsers download or reject the file.
- JSON MIME Typeapplication/json .json application/json is the IANA type for a JSON text, and the header does not take a charset parameter.
- PDF MIME Typeapplication/pdf .pdf application/pdf is the type for a PDF document, and the header decides whether the browser shows it or downloads it.
- PNG MIME Typeimage/png .png image/png is the type for a PNG image, identified by an 8-byte signature that starts with 89 50 4E 47.
- JPG MIME Typeimage/jpeg .jpg image/jpeg is the type for a JPEG image. .jpg is the three-letter spelling of that extension.
- JPEG MIME Typeimage/jpeg .jpeg image/jpeg is the type for a JPEG image. .jpeg is the four-letter spelling of the extension.
- GIF MIME Typeimage/gif .gif image/gif is the type for a GIF image, including animated GIF. The signature is GIF87a or GIF89a.
- SVG MIME Typeimage/svg+xml .svg image/svg+xml is the type for an SVG document. The file is XML, and a script inside it runs if the browser treats it as an image document.
- WEBP MIME Typeimage/webp .webp image/webp is the registered type for a WebP image. The file is a RIFF container whose form type is WEBP.
- AVIF MIME Typeimage/avif .avif image/avif is the type for an AV1 image in a HEIF container. The file brand in the ftyp box is avif.
- ICO MIME Typeimage/vnd.microsoft.icon .ico image/vnd.microsoft.icon is the IANA type for a .ico icon. image/x-icon is the older alias browsers already accept.
- BMP MIME Typeimage/bmp .bmp image/bmp is the registered type for a Windows bitmap. The file starts with BM.
- TIFF MIME Typeimage/tiff .tiff image/tiff is the type for a TIFF image. .tiff and .tif are the same format.
- HEIC MIME Typeimage/heic .heic image/heic is the type for an HEIC photo, which is HEVC stored in a HEIF container.
- MP3 MIME Typeaudio/mpeg .mp3 audio/mpeg is the IANA type for an MP3 file. audio/mp3 is a common unofficial alias.
- WAV MIME Typeaudio/wav .wav audio/wav is the type browsers and servers use for a WAVE file. The bytes are a RIFF container with form type WAVE.
- OGG MIME Typeaudio/ogg .ogg audio/ogg is the type for an Ogg audio file, commonly Opus or Vorbis. video/ogg is a different type.
- FLAC MIME Typeaudio/flac .flac audio/flac is the registered type for native FLAC. The file starts with fLaC.
- AAC MIME Typeaudio/aac .aac audio/aac is the type for an ADTS AAC file. AAC inside an MP4 container is audio/mp4, not this type.
- M4A MIME Typeaudio/mp4 .m4a audio/mp4 is the type for AAC or ALAC in an MP4 container. .m4a is the audio extension.
- MP4 MIME Typevideo/mp4 .mp4 video/mp4 is the type for an MP4 movie. The file is ISOBMFF and should carry a codecs parameter when a client has to choose a decoder.
- WEBM MIME Typevideo/webm .webm video/webm is the type browsers require for a WebM movie. The file is a Matroska subset that starts with the EBML header.
- MOV MIME Typevideo/quicktime .mov video/quicktime is the type for a QuickTime .mov file. It is an ISOBMFF cousin of MP4 and not the same type.
- AVI MIME Typevideo/x-msvideo .avi video/x-msvideo is the type static servers send for an AVI file. The bytes are a RIFF container with form type AVI.
- MKV MIME Typevideo/matroska .mkv video/matroska is the registered type for a Matroska video file. WebM is a subset and uses video/webm instead.
- M3U8 MIME Typeapplication/vnd.apple.mpegurl .m3u8 application/vnd.apple.mpegurl is the type for an HLS playlist. The file is UTF-8 text, not the media segments.
- TS MIME Typevideo/mp2t .ts video/mp2t is the IANA type for an MPEG transport stream, the .ts segments in HLS. A .ts file of TypeScript source is not this type.
- CSV MIME Typetext/csv .csv text/csv is the type for comma-separated values. RFC 4180's default charset is US-ASCII, so send charset=utf-8.
- TSV MIME Typetext/tab-separated-values .tsv text/tab-separated-values is the IANA type for a tab-separated file. Tabs, not commas, separate fields.
- XML MIME Typeapplication/xml .xml application/xml is the type RFC 7303 prefers for XML. text/xml carries a confusing US-ASCII default.
- HTML MIME Typetext/html .html text/html is the type for an HTML document. Send charset=utf-8, and do not use this type for XHTML that you want parsed as XML.
- CSS MIME Typetext/css .css text/css is the type for a stylesheet. Browsers refuse to apply a cross-origin sheet served as a different type.
- JS MIME Typetext/javascript .js text/javascript is the standard type for a JavaScript file. RFC 9239 obsoletes application/javascript, and you do not send a charset parameter.
- MJS MIME Typetext/javascript .mjs text/javascript is the type for a .mjs module file. The extension tells Node to treat the file as a module. The browser still wants text/javascript.
- TXT MIME Typetext/plain .txt text/plain is the type for a text file with no markup. Send charset=utf-8, because the historical default is US-ASCII.
- MD MIME Typetext/markdown .md text/markdown is the RFC 7763 type for a Markdown file. The default charset is UTF-8, and the body is source, not rendered HTML.
- YAML MIME Typeapplication/yaml .yaml application/yaml is the RFC 9512 type for a YAML document. .yml uses the same type. The file is not JSON.
- TOML MIME Typeapplication/toml .toml application/toml is the registered type for a TOML configuration file. The body is UTF-8 text with tables and keys.
- GEOJSON MIME Typeapplication/geo+json .geojson application/geo+json is the RFC 7946 type for GeoJSON. Coordinates are longitude then latitude, in WGS 84.
- JSONLD MIME Typeapplication/ld+json .jsonld application/ld+json is the type for a JSON-LD document. A script tag of that type inside HTML is data, not JavaScript.
- SQL MIME Typeapplication/sql .sql application/sql is the RFC 6922 type for a SQL script. The header does not say which database dialect the script is.
- ICS MIME Typetext/calendar .ics text/calendar is the type for an iCalendar file. The body starts with BEGIN:VCALENDAR and is not JSON.
- VCF MIME Typetext/vcard .vcf text/vcard is the type for a vCard contact file. RFC 6350 is version 4. Many files in the wild are still version 3.
- XHTML MIME Typeapplication/xhtml+xml .xhtml application/xhtml+xml is XHTML parsed as XML. A well-formedness error blanks the page. Ordinary HTML should stay text/html.
- WEBMANIFEST MIME Typeapplication/manifest+json .webmanifest application/manifest+json is the type for a web app manifest. Browsers ignore a manifest served as a generic JSON type in some cases, and they always need this one to be safe.
- ZIP MIME Typeapplication/zip .zip application/zip is the type for a ZIP archive. A DOCX or an EPUB is a ZIP too, and those formats have their own types.
- GZ MIME Typeapplication/gzip .gz application/gzip means the body is a gzip file. Content-Encoding: gzip means the body is a compressed representation of some other type.
- TAR MIME Typeapplication/x-tar .tar application/x-tar is the type servers use for an uncompressed tar archive. A .tar.gz file is application/gzip, not this type.
- 7Z MIME Typeapplication/x-7z-compressed .7z application/x-7z-compressed is the type servers use for a 7z archive. The signature is 37 7A BC AF 27 1C.
- RAR MIME Typeapplication/vnd.rar .rar application/vnd.rar is the registered type for a RAR archive. RAR 5 and RAR 4 have different signatures and the same type.
- WASM MIME Typeapplication/wasm .wasm application/wasm is the type for a WebAssembly module. Streaming compile fails closed when the type is anything else.
- WOFF MIME Typefont/woff .woff font/woff is the RFC 8081 type for a WOFF 1.0 font. The file starts with wOFF. Browsers also require CORS when the font is cross-origin.
- WOFF2 MIME Typefont/woff2 .woff2 font/woff2 is the type for a WOFF 2 font. The file starts with wOF2 and uses brotli compression for the tables.
- TTF MIME Typefont/ttf .ttf font/ttf is the RFC 8081 type for a TrueType font. The scaler type at the start is 00 01 00 00 or the tag true.
- OTF MIME Typefont/otf .otf font/otf is the type for an OpenType font with CFF outlines. The file starts with the tag OTTO.
- DOCX MIME Typeapplication/vnd.openxmlformats-officedocument.wordprocessingml.document .docx A .docx file is a ZIP package of XML parts. Its type is the long Open XML wordprocessingml type, not application/zip.
- XLSX MIME Typeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsx A .xlsx workbook is a ZIP of XML parts. The type is the Open XML spreadsheetml sheet type, not text/csv and not application/zip.
- PPTX MIME Typeapplication/vnd.openxmlformats-officedocument.presentationml.presentation .pptx A .pptx deck is a ZIP of presentation XML. The type is the Open XML presentationml type.
- DOC MIME Typeapplication/msword .doc application/msword is the type for a legacy binary Word .doc file. A .docx package uses the Open XML type instead.
- XLS MIME Typeapplication/vnd.ms-excel .xls application/vnd.ms-excel is the type for a legacy binary Excel .xls workbook. .xlsx uses the Open XML spreadsheet type.
- EPUB MIME Typeapplication/epub+zip .epub application/epub+zip is the type for an EPUB book. The file is a ZIP whose first entry is the ASCII string mimetype.
- ATOM MIME Typeapplication/atom+xml .atom application/atom+xml is the RFC 4287 type for an Atom feed. RSS is a different vocabulary and is not this type.
- PARQUET MIME Typeapplication/vnd.apache.parquet .parquet application/vnd.apache.parquet is the type for an Apache Parquet columnar file. The magic at both ends is PAR1.
- SQLITE MIME Typeapplication/vnd.sqlite3 .sqlite application/vnd.sqlite3 is the type for a SQLite 3 database file. The header is the string SQLite format 3 followed by a null.
- APK MIME Typeapplication/vnd.android.package-archive .apk application/vnd.android.package-archive is the type to send for an Android APK. The file is a ZIP with Android package constraints.
- DEB MIME Typeapplication/vnd.debian.binary-package .deb application/vnd.debian.binary-package is the type for a .deb package. The file starts with the ASCII string !<arch>.
- EXE MIME Typeapplication/vnd.microsoft.portable-executable .exe application/vnd.microsoft.portable-executable is the type for a Windows PE executable. The file starts with MZ. Browsers should download it, not run it.
How a server picks a type
A static file server usually maps the URL extension through a table: nginx mime.types, Apache mime.types, or the mime database inside a framework. That mapping is a guess. The bytes are the file. The Content-Type header is what the client is supposed to believe. When the table is wrong, browsers download a page they could have rendered, refuse to compile a WebAssembly module, or treat a stylesheet as a download. An application that sets the header itself should set the type on this page, not the closest type the framework ships.
Charset is a parameter, not a different type. text/csv and text/html need charset=utf-8 because their defaults are not reliably UTF-8. application/json and text/javascript do not take a charset parameter in their current registrations, and the body is UTF-8 anyway. Binary types, including images, archives, fonts, and WebAssembly, must not grow a charset. The detail pages say which of those three cases applies.
The extensions
.json is application/json. application/json is the IANA type for a JSON text, and the header does not take a charset parameter. .pdf is application/pdf. application/pdf is the type for a PDF document, and the header decides whether the browser shows it or downloads it. .png is image/png. image/png is the type for a PNG image, identified by an 8-byte signature that starts with 89 50 4E 47. .jpg is image/jpeg. image/jpeg is the type for a JPEG image. .jpg is the three-letter spelling of that extension. .jpeg is image/jpeg. image/jpeg is the type for a JPEG image. .jpeg is the four-letter spelling of the extension. .gif is image/gif. image/gif is the type for a GIF image, including animated GIF. The signature is GIF87a or GIF89a. .svg is image/svg+xml. image/svg+xml is the type for an SVG document. The file is XML, and a script inside it runs if the browser treats it as an image document. .webp is image/webp. image/webp is the registered type for a WebP image. The file is a RIFF container whose form type is WEBP. .avif is image/avif. image/avif is the type for an AV1 image in a HEIF container. The file brand in the ftyp box is avif. .ico is image/vnd.microsoft.icon. image/vnd.microsoft.icon is the IANA type for a .ico icon. image/x-icon is the older alias browsers already accept. .bmp is image/bmp. image/bmp is the registered type for a Windows bitmap. The file starts with BM. .tiff is image/tiff. image/tiff is the type for a TIFF image. .tiff and .tif are the same format. .heic is image/heic. image/heic is the type for an HEIC photo, which is HEVC stored in a HEIF container. .mp3 is audio/mpeg. audio/mpeg is the IANA type for an MP3 file. audio/mp3 is a common unofficial alias. .wav is audio/wav. audio/wav is the type browsers and servers use for a WAVE file. The bytes are a RIFF container with form type WAVE. .ogg is audio/ogg. audio/ogg is the type for an Ogg audio file, commonly Opus or Vorbis. video/ogg is a different type. .flac is audio/flac. audio/flac is the registered type for native FLAC. The file starts with fLaC. .aac is audio/aac. audio/aac is the type for an ADTS AAC file. AAC inside an MP4 container is audio/mp4, not this type. .m4a is audio/mp4. audio/mp4 is the type for AAC or ALAC in an MP4 container. .m4a is the audio extension. .mp4 is video/mp4. video/mp4 is the type for an MP4 movie. The file is ISOBMFF and should carry a codecs parameter when a client has to choose a decoder. .webm is video/webm. video/webm is the type browsers require for a WebM movie. The file is a Matroska subset that starts with the EBML header. .mov is video/quicktime. video/quicktime is the type for a QuickTime .mov file. It is an ISOBMFF cousin of MP4 and not the same type. .avi is video/x-msvideo. video/x-msvideo is the type static servers send for an AVI file. The bytes are a RIFF container with form type AVI. .mkv is video/matroska. video/matroska is the registered type for a Matroska video file. WebM is a subset and uses video/webm instead. .m3u8 is application/vnd.apple.mpegurl. application/vnd.apple.mpegurl is the type for an HLS playlist. The file is UTF-8 text, not the media segments. .ts is video/mp2t. video/mp2t is the IANA type for an MPEG transport stream, the .ts segments in HLS. A .ts file of TypeScript source is not this type. .csv is text/csv. text/csv is the type for comma-separated values. RFC 4180's default charset is US-ASCII, so send charset=utf-8. .tsv is text/tab-separated-values. text/tab-separated-values is the IANA type for a tab-separated file. Tabs, not commas, separate fields. .xml is application/xml. application/xml is the type RFC 7303 prefers for XML. text/xml carries a confusing US-ASCII default. .html is text/html. text/html is the type for an HTML document. Send charset=utf-8, and do not use this type for XHTML that you want parsed as XML. .css is text/css. text/css is the type for a stylesheet. Browsers refuse to apply a cross-origin sheet served as a different type. .js is text/javascript. text/javascript is the standard type for a JavaScript file. RFC 9239 obsoletes application/javascript, and you do not send a charset parameter. .mjs is text/javascript. text/javascript is the type for a .mjs module file. The extension tells Node to treat the file as a module. The browser still wants text/javascript. .txt is text/plain. text/plain is the type for a text file with no markup. Send charset=utf-8, because the historical default is US-ASCII. .md is text/markdown. text/markdown is the RFC 7763 type for a Markdown file. The default charset is UTF-8, and the body is source, not rendered HTML. .yaml is application/yaml. application/yaml is the RFC 9512 type for a YAML document. .yml uses the same type. The file is not JSON. .toml is application/toml. application/toml is the registered type for a TOML configuration file. The body is UTF-8 text with tables and keys. .geojson is application/geo+json. application/geo+json is the RFC 7946 type for GeoJSON. Coordinates are longitude then latitude, in WGS 84. .jsonld is application/ld+json. application/ld+json is the type for a JSON-LD document. A script tag of that type inside HTML is data, not JavaScript. .sql is application/sql. application/sql is the RFC 6922 type for a SQL script. The header does not say which database dialect the script is. .ics is text/calendar. text/calendar is the type for an iCalendar file. The body starts with BEGIN:VCALENDAR and is not JSON. .vcf is text/vcard. text/vcard is the type for a vCard contact file. RFC 6350 is version 4. Many files in the wild are still version 3. .xhtml is application/xhtml+xml. application/xhtml+xml is XHTML parsed as XML. A well-formedness error blanks the page. Ordinary HTML should stay text/html. .webmanifest is application/manifest+json. application/manifest+json is the type for a web app manifest. Browsers ignore a manifest served as a generic JSON type in some cases, and they always need this one to be safe. .zip is application/zip. application/zip is the type for a ZIP archive. A DOCX or an EPUB is a ZIP too, and those formats have their own types. .gz is application/gzip. application/gzip means the body is a gzip file. Content-Encoding: gzip means the body is a compressed representation of some other type. .tar is application/x-tar. application/x-tar is the type servers use for an uncompressed tar archive. A .tar.gz file is application/gzip, not this type. .7z is application/x-7z-compressed. application/x-7z-compressed is the type servers use for a 7z archive. The signature is 37 7A BC AF 27 1C. .rar is application/vnd.rar. application/vnd.rar is the registered type for a RAR archive. RAR 5 and RAR 4 have different signatures and the same type. .wasm is application/wasm. application/wasm is the type for a WebAssembly module. Streaming compile fails closed when the type is anything else. .woff is font/woff. font/woff is the RFC 8081 type for a WOFF 1.0 font. The file starts with wOFF. Browsers also require CORS when the font is cross-origin. .woff2 is font/woff2. font/woff2 is the type for a WOFF 2 font. The file starts with wOF2 and uses brotli compression for the tables. .ttf is font/ttf. font/ttf is the RFC 8081 type for a TrueType font. The scaler type at the start is 00 01 00 00 or the tag true. .otf is font/otf. font/otf is the type for an OpenType font with CFF outlines. The file starts with the tag OTTO. .docx is application/vnd.openxmlformats-officedocument.wordprocessingml.document. A .docx file is a ZIP package of XML parts. Its type is the long Open XML wordprocessingml type, not application/zip. .xlsx is application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. A .xlsx workbook is a ZIP of XML parts. The type is the Open XML spreadsheetml sheet type, not text/csv and not application/zip. .pptx is application/vnd.openxmlformats-officedocument.presentationml.presentation. A .pptx deck is a ZIP of presentation XML. The type is the Open XML presentationml type. .doc is application/msword. application/msword is the type for a legacy binary Word .doc file. A .docx package uses the Open XML type instead. .xls is application/vnd.ms-excel. application/vnd.ms-excel is the type for a legacy binary Excel .xls workbook. .xlsx uses the Open XML spreadsheet type. .epub is application/epub+zip. application/epub+zip is the type for an EPUB book. The file is a ZIP whose first entry is the ASCII string mimetype. .atom is application/atom+xml. application/atom+xml is the RFC 4287 type for an Atom feed. RSS is a different vocabulary and is not this type. .parquet is application/vnd.apache.parquet. application/vnd.apache.parquet is the type for an Apache Parquet columnar file. The magic at both ends is PAR1. .sqlite is application/vnd.sqlite3. application/vnd.sqlite3 is the type for a SQLite 3 database file. The header is the string SQLite format 3 followed by a null. .apk is application/vnd.android.package-archive. application/vnd.android.package-archive is the type to send for an Android APK. The file is a ZIP with Android package constraints. .deb is application/vnd.debian.binary-package. application/vnd.debian.binary-package is the type for a .deb package. The file starts with the ASCII string !<arch>. .exe is application/vnd.microsoft.portable-executable. application/vnd.microsoft.portable-executable is the type for a Windows PE executable. The file starts with MZ. Browsers should download it, not run it.
The filter on this page runs in the browser. It matches the extension, the type string, and the short description. Nothing you type is sent. Types that are registered at IANA are cited that way. A few extensions people still have to serve, including WebM, WAV, and MPEG-TS versus TypeScript, are labeled with the type browsers or the format's own spec actually require when that string is not the IANA record.
Sniffing and downloads
Browsers sniff some responses when the header is missing or generic, and they stop sniffing when you send X-Content-Type-Options: nosniff. Sniffing is how a mislabeled HTML file becomes a page, and it is also how a file you thought was an image becomes script. Send the specific type, then nosniff, for any response a user can upload. application/octet-stream is the honest type for bytes you do not know. It is the wrong type for a PNG, a PDF, or a font you do know.
Content-Encoding is not a type. Content-Encoding: gzip means the body is a compressed representation of the type in Content-Type. application/gzip means the body is a gzip file the user should save. Mixing those up is the usual reason a .gz download arrives as a corrupt document, and the gzip page covers it. Port numbers for the servers that emit these headers are on the ports reference.
Frequently asked questions
Does the lookup upload the filename?
No. The filter hides rows in the page. The type table is already in the file the browser downloaded.
Should every text response include charset=utf-8?
No. CSV, HTML, CSS, and plain text should. JSON and JavaScript should not, because their registrations do not use a charset parameter.
Is application/octet-stream a safe default?
It is safe for unknown bytes. It is a bug for a format the browser knows how to show, because the client will download instead of render.
Are media type names case-sensitive?
No. image/jpeg and image/JPEG are the same type. A different subtype, such as image/jpg, is not registered and is not the same type.