Also available in: Español · Português · Français · العربية
MIME Types
The media types you can actually be served, with the registered ones marked and the disagreements adjudicated.
What is a MIME type?
A MIME type — the standard now calls it a media type — is the label a server attaches to a file so the browser knows what it is. It travels in the Content-Type header, it looks like text/html or image/png, and it is what decides whether your browser renders a page, shows a picture or offers a download. Get it wrong and a perfectly good file arrives as gibberish or as a download prompt.
The authoritative list is the IANA media types registry, which holds 2,318 of them across nine top-level trees. This page is built from that registry, from Apache httpd's mime.types and from nginx's, all three fetched rather than remembered.
It is deliberately not a dump of the registry, for a reason worth knowing before you go looking there yourself.
How to use this list
- Search by extension or by type. A file extension matches exactly, with or without the leading dot, so webp and .webp both work. Anything else matches inside the media type: image/ gives you the image tree, +xml gives you the structured-suffix types.
- Check the badge before you trust a type. Registered means it is in the IANA registry, and the reference beside it is the RFC or organisation that put it there. The rest are types a web server will happily send you that no registry has ever heard of.
- Read the disagreement table if your file is one of the awkward ones. Thirteen extensions get different answers from Apache and nginx, and the table says which side the registry supports for each.
The registry cannot answer the question you came with
Almost everyone arrives at a MIME type list asking the same thing: what Content-Type should I send for a .webp file? The IANA registry cannot tell you. Its columns are Name, Template and Reference — there is no file extension column, because which extension means which type is not something IANA registers. You can look up image/webp and confirm it exists; you cannot look up .webp.
Nothing else fills the gap either. The WHATWG MIME Sniffing Standard, the specification browsers actually implement, states plainly that file extensions are not used to determine the type of a resource fetched over HTTP because they are unreliable and easily spoofed, and it publishes no extension table of its own. The mapping simply is not standardised anywhere.
What decides in practice is whichever web server is in front of your files. So this list uses a stated rule rather than a curated selection: it contains every media type that Apache httpd or nginx maps at least one extension to — 790 of them, the set you can actually be served. The registry total is printed beside it so nobody mistakes the part for the whole.
Two servers, 91 shared extensions, 13 disagreements
Apache maps 998 extensions and nginx maps 110. Ninety-one appear in both, and on thirteen of those — 14.3 per cent — the two give different answers. These are not obscure formats. They include .js and .xml, two of the most-served file types on the web.
A bare disagreement count would be worthless, so every conflict on this page is adjudicated against the registry. Three of them Apache simply wins: .bmp, .m4a and .pdb get a registered type from Apache and an unregistered one from nginx. Six are nginx falling back to application/octet-stream, which is registered and technically correct and tells the browser nothing at all — that is what makes .exe, .iso and .deb download rather than misbehave. Two have no registered type on either side.
The remaining two are the interesting ones, and they are interesting in opposite directions. For .xml both application/xml and text/xml are registered, and RFC 7303 registers both on purpose: neither server is wrong and there is no answer to find. For .js both are registered too, but the entry for application/javascript cites RFC 9239 — the document that made text/javascript the standard form and left the others obsolete. Apache is current; nginx is behind. Same surface symptom, completely different explanation, and only reading the references distinguishes them.
A third of what you can be served is not in the registry
Of the 790 media types these servers map to extensions, 547 are in the IANA registry and 243 are not. That is close to a third of everything a default install will hand a browser, carrying a Content-Type that no standards body has ever recorded. Most are the x- prefixed leftovers of formats that never got registered, and they work fine in practice precisely because nothing checks.
Seven of them go further and use a top-level tree that does not exist. IANA registers nine — application, audio, font, image, message, model, multipart, text and video — and Apache ships six chemical/* types for molecular file formats plus one under x-conference. A stock web server will serve you a Content-Type whose first component is not a registered tree at all.
None of this is a scandal; it is how a thirty-year-old convention with no enforcement mechanism ends up working. But it is worth knowing before you assume that a type appearing in a config file means it is standard.
Honest limits
This is a snapshot of three moving documents, and the date it was built is printed at the bottom. The registry gains entries regularly, and both servers update their mappings; the script that assembles all of it is in the repository, so the page can say when it was last true.
Two servers is also not every server. IIS, Caddy, Node frameworks, CDNs and every language's standard library each carry their own table, and they will not agree with these two in every case either. Apache and nginx were chosen because they are the two that serve the most of the web, not because they are the only opinions that exist.
And the deepest limit is the one the sniffing standard warns about: the type a server declares is not evidence about what a file contains. Anyone can upload a file called photo.png full of HTML, which is exactly why browsers sniff and why you should never trust a Content-Type header for a security decision.
Why is it free?
Because it is a list of public facts assembled from three public sources. The page is static text with a search box that filters it in your browser — nothing is uploaded, nothing is stored, and no server is involved in reading it.
So there is no account, no sign-up and nothing held back. The registry is a public document, both mime.types files are open source, and the script that turns them into this page sits in the repository alongside it.