HTML document
Nakikita rin bilang application/xhtml+xml
Serve with charset=utf-8. Without it the browser guesses, and a page of UTF-8 renders as mojibake.
HTML document
Cascading style sheet
JavaScript
Nakikita rin bilang application/javascript · application/x-javascript
text/javascript is what the WHATWG specification requires. The application/ forms are historical and still widely seen.
JavaScript module
JSON
No charset parameter. JSON is defined as UTF-8, so adding one is redundant and technically invalid.
JSON-LD
Structured data. Must NOT be served as application/json if you want it treated as linked data.
XML
Nakikita rin bilang text/xml
text/xml defaults to US-ASCII when no charset is given, which is almost never what is meant. Prefer application/xml.
Comma-separated values
Plain text
Markdown
SVG vector image
An image and a document at once. It can carry script, so never serve an uploaded SVG from your own origin.
PNG image
JPEG image
The type is image/jpeg for both .jpg and .jpeg. There is no image/jpg.
JPEG image
GIF image
WebP image
AVIF image
Icon
Nakikita rin bilang image/vnd.microsoft.icon
image/x-icon carries a deprecated x- prefix and is nonetheless what every browser expects.
Bitmap image
TIFF image
HEIC image
What an iPhone produces by default. Browser support is still thin.
MP3 audio
audio/mpeg, not audio/mp3 — which is not a registered type.
WAV audio
Ogg audio
MPEG-4 audio
MPEG-4 video
WebM video
QuickTime video
AVI video
PDF document
Word document (legacy)
Word document
The long Office types are correct and are routinely truncated by hand. Copy them rather than typing them.
Excel workbook (legacy)
Excel workbook
PowerPoint (legacy)
PowerPoint
Rich text
WOFF font
WOFF2 font
font/woff2, not application/font-woff2. The font/ tree was registered in RFC 8081 and supersedes the older forms.
TrueType font
OpenType font
ZIP archive
Gzip archive
Tar archive
7-Zip archive
RAR archive
Arbitrary binary
The fallback for anything unknown. Browsers download it rather than trying to render it, which is usually the safe choice.
WebAssembly module
Must be served with this exact type — streaming compilation refuses anything else.
Isang bagay ang gumagawa ng pinakamaraming problema: ang nawawalang charset. Ang text/html na walang charset ay iniiwan sa browser ang paghula ng encoding — at madalas hindi UTF-8 ang hula. Doon nanggagaling ang mga basurang karakter sa halip na tamang titik at piso sign.
Pero hindi lahat ay kailangan ng charset. Ang JSON ay nakatakdang UTF-8 sa sarili nitong espesipikasyon, kaya ang pagdagdag ng charset doon ay labis. Kaya minamarkahan ng pahinang ito kung alin ang nangangailangan.
At ang pabalik na hanap ay hindi function. Isa lang ang tamang sagot mula extension papuntang type — pero ang image/jpeg ay .jpg at .jpeg. Ibinabalik dito ang lahat sa halip na pumili ng isa at magmukhang awtoridad tungkol dito.
Halos tiyak na kulang ang charset. Ang text/html na walang charset na parameter ay ipinapaubaya sa browser ang paghula sa encoding, at madalas na hindi UTF-8 ang hula nito — kaya nagiging mojibake ang letrang may tuldik at ang tandang piso. Ihain ang text/html; charset=utf-8. Ganoon din sa text/css, text/csv at text/plain.
Hindi. Nakatakda ang JSON bilang UTF-8 sa sariling espesipikasyon nito, kaya labis ang charset na parameter at teknikal na hindi pinapayagan sa uring iyon. Ang panuntunan ay hindi “laging magdagdag ng charset” — ito ay “magdagdag kung saan malabo ang uri kung wala ito”, at iyon ang dahilan kung bakit minamarkahan ng pahinang ito ang uring nangangailangan nito.
image/jpeg, palagi — para sa .jpg at .jpeg na extension. Walang nakarehistrong uring tinatawag na image/jpg, kahit palagi itong isinusulat nang kinamay. Ganoon ding bitag ang nakakahuli sa audio: audio/mpeg ito, hindi audio/mp3.
Dahil hindi function ang pagmamapa sa direksiyong iyon. Ang image/jpeg ay .jpg at .jpeg; ang image/tiff ay .tif at .tiff. Ang pagpunta mula extension patungong uri ay may iisang tamang sagot, pero ang pagbalik ay may ilan, kaya ibinabalik silang lahat ng pahinang ito sa halip na pumili ng isa at magmukhang awtoridad tungkol dito.
application/octet-stream. Dina-download ito ng browser sa halip na subukang ipakita, at iyon ang ligtas na default — ang mapanganib na palya ay ang paghain ng hindi kilalang nilalaman bilang bagay na patatakbuhin o ipapakita ng browser. Huwag kailanman huhulaan ang uri mula sa input na galing sa user.
Dahil dokumento rin ang SVG bukod sa larawan. Puwede itong magdala ng script, at kung inihain mula sa sarili mong origin ay tatakbo ang script na iyon na may mga pribilehiyo ng site mo. Ihain ang SVG na galing sa user mula sa hiwalay na origin, o gawin silang raster. Walang anumang daan ng pag-upload ang site na ito, at iyon ang pinakapayak na bersiyon ng parehong sagot.
Ibinasura ito ng RFC 6648 noong 2012 — ang ideyang dapat markahan ang eksperimental na uri ay lumabas na mas maraming ginugulo kaysa napipigilan. Ilang x- na uri ay permanente nang nakatakda sa ibang espesipikasyon at hindi na magbabago, lalo na ang application/x-www-form-urlencoded, na nakasulat sa HTML mismo. Nakalista sila rito bilang ang tamang anyo, dahil ang pagtatama sa kanila patungo sa bagay na walang server na tumatanggap ay mas walang silbi pa.
Ang una at pangalawa ay isinusulat sa kamay araw-araw at hindi kailanman nairehistro.
Ihain ang application/octet-stream. Dina-download ito ng browser sa halip na subukang i-render, at iyon ang ligtas na default. Ang mapanganib ay ang paghain ng hindi kilalang nilalaman bilang isang bagay na ipapatakbo o ipapakita ng browser — kaya huwag kailanman huhulaan ang type mula sa input ng gumagamit.
Based on the IANA media types registry and the mappings browsers and web servers actually use. Where the registry and common practice differ, the form browsers require is listed as canonical and the other as an alias. Walang ipinapadala sa mga server namin ang tina-type mo rito — sa browser mo tumatakbo nang buo ang pagkuwenta.