Web Font MIME Types: WOFF2, TTF, and CORS

Web font MIME types affect browser parsing and CORS enforcement. font/woff2 as the only modern format, cross-origin CORS rules, and CSS @font-face format hints.

ZERO UPLOAD · ALL LOCAL
  1. Type a MIME string (e.g. application/json), file extension (e.g. .wasm), or keyword (e.g. "protobuf") to search the database.
  2. Use the category pills (Application, Audio, Font, Image, Model, Text, Video, Multipart) to browse all types in a category.
  3. Click Details on any card to expand the description, spec link, and server configuration snippets in a full-width panel.
  4. Click Copy next to any snippet block to copy the Nginx, Apache, .htaccess, or Caddy directive to your clipboard.

Font formats registered under RFC 8081

  • font/woff2 Brotli compression, universal support since 2016 — the only format worth serving
  • font/woff WOFF 1.0, zlib compression — needed only for IE 11
  • font/ttf, font/otf installation formats, not meant for HTTP delivery
  • Browser support since Chrome 36, Firefox 39, Safari 10, Edge 14

APPLICATION (100 types)

application/json
.json
application/xml
.xml .xsl .xslt
application/pdf
.pdf
application/wasm
.wasm
application/javascript
.js .mjs .cjs
application/zip
.zip
application/gzip
.gz .tgz
application/x-tar
.tar
application/x-7z-compressed
.7z
application/vnd.rar
.rar
application/x-bzip2
.bz2
application/vnd.openxmlformats-officedocument.wordprocessingml.document
.docx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xlsx
application/vnd.openxmlformats-officedocument.presentationml.presentation
.pptx
application/msword
.doc
application/vnd.ms-excel
.xls
application/vnd.ms-powerpoint
.ppt
application/octet-stream
.bin .exe .dll
application/x-www-form-urlencoded
application/cbor
.cbor
application/x-protobuf
.proto .pb
application/grpc
application/graphql-response+json
application/vnd.api+json
application/ld+json
.jsonld
application/hal+json
application/jwt
application/manifest+json
.webmanifest
application/rtf
.rtf
application/problem+json
application/json-patch+json
application/merge-patch+json
application/vnd.geo+json
.geojson
application/yaml
.yaml .yml
application/sql
.sql
application/epub+zip
.epub
application/java-archive
.jar
application/vnd.oasis.opendocument.text
.odt
application/vnd.oasis.opendocument.spreadsheet
.ods
application/vnd.oasis.opendocument.presentation
.odp
application/x-ndjson
.ndjson .jsonl
application/vnd.apple.mpegurl
.m3u8
application/dash+xml
.mpd
application/rss+xml
.rss
application/atom+xml
.atom
application/x-apple-diskimage
.dmg
application/x-debian-package
.deb
application/x-rpm
.rpm
application/x-sh
.sh
application/ecmascript
application/toml
.toml
application/zstd
.zst
application/x-xz
.xz
application/x-bzip
.bz
application/x-lzma
.lzma
application/x-iso9660-image
.iso
application/vnd.ms-cab-compressed
.cab
application/vnd.android.package-archive
.apk
application/x-msdownload
.msi
application/vnd.apple.installer+xml
.mpkg
application/x-httpd-cgi
.cgi
application/vnd.google-earth.kml+xml
.kml
application/vnd.google-earth.kmz
.kmz
application/vnd.sqlite3
.sqlite .sqlite3 .db
application/msgpack
.msgpack
application/schema+json
application/wsdl+xml
.wsdl
application/jose+json
application/x-pkcs12
.p12 .pfx
application/pkix-cert
.cer .der
application/x-pem-file
.pem .crt .key
application/pkcs8
.p8
application/pkcs10
.p10 .csr
application/postscript
.ps .eps .ai
application/x-latex
.latex .ltx
application/x-tex
.tex
application/x-dvi
.dvi
application/fits
.fits .fit .fts
application/vnd.oasis.opendocument.graphics
.odg
application/vnd.oasis.opendocument.chart
.odc
application/vnd.oasis.opendocument.formula
.odf
application/vnd.ms-project
.mpp .mpt
application/vnd.visio
.vsd .vst .vss .vsw
application/vnd.ms-access
.mdb
application/vnd.openxmlformats-officedocument.wordprocessingml.template
.dotx
application/vnd.ms-word.document.macroenabled.12
.docm
application/vnd.ms-excel.sheet.macroenabled.12
.xlsm
application/vnd.apple.pages
.pages
application/vnd.apple.numbers
.numbers
application/vnd.apple.keynote
.key
application/typescript
.ts
application/x-perl
.pl .pm
application/x-python-code
.pyc .pyo
application/x-csh
.csh
application/x-troff
.tr .roff .man
application/trig
.trig
application/n-triples
.nt
application/smil+xml
.smil .smi
application/vnd.mozilla.xul+xml
.xul
application/vnd.lotus-1-2-3
.123 .wks

AUDIO (23 types)

audio/mpeg
.mp3 .mpga
audio/ogg
.ogg .oga
audio/wav
.wav
audio/flac
.flac
audio/aac
.aac
audio/opus
.opus
audio/webm
.weba
audio/midi
.mid .midi
audio/mp4
.m4a .m4b .mp4a
audio/3gpp
.3gp .3gpp
audio/aiff
.aif .aiff
audio/x-ms-wma
.wma
audio/amr
.amr
audio/speex
.spx
audio/ac3
.ac3
audio/vorbis
audio/basic
.au .snd
audio/x-caf
.caf
audio/mpegurl
.m3u
audio/vnd.dts
.dts
audio/mp2
.mp2
audio/3gpp2
.3g2
audio/x-realaudio
.ra .ram

FONT (10 types)

font/woff
.woff
font/woff2
.woff2
font/ttf
.ttf
font/otf
.otf
application/vnd.ms-fontobject
.eot
font/collection
.ttc
font/sfnt
.sfnt
application/x-font-truetype
.ttf
application/x-font-opentype
.otf
application/x-font-woff
.woff

IMAGE (35 types)

image/jpeg
.jpg .jpeg .jfif
image/png
.png
image/gif
.gif
image/webp
.webp
image/avif
.avif
image/svg+xml
.svg .svgz
image/vnd.microsoft.icon
.ico
image/x-icon
.ico
image/bmp
.bmp
image/tiff
.tiff .tif
image/heic
.heic
image/heif
.heif
image/apng
.apng
image/jxl
.jxl
image/jp2
.jp2 .j2k .jpf
image/jpx
.jpx
image/vnd.djvu
.djvu .djv
image/vnd.adobe.photoshop
.psd
image/x-portable-bitmap
.pbm
image/x-portable-graymap
.pgm
image/x-portable-pixmap
.ppm
image/x-xcf
.xcf
image/ktx
.ktx
image/ktx2
.ktx2
image/x-exr
.exr
image/x-rgb
.rgb .rgba .sgi
image/x-xbitmap
.xbm
image/x-pcx
.pcx
image/vnd.wap.wbmp
.wbmp
image/x-tga
.tga .tpic
image/vnd.ms-photo
.jxr .hdp .wdp
image/x-win-bitmap
.cur
image/x-emf
.emf
image/wmf
.wmf
image/vnd.radiance
.hdr .rgbe

MODEL (19 types)

model/gltf+json
.gltf
model/gltf-binary
.glb
model/obj
.obj
model/stl
.stl
model/usd
.usd .usda .usdc
model/vnd.collada+xml
.dae
model/vnd.usdz+zip
.usdz
model/mtl
.mtl
model/vnd.dwf
.dwf
model/iges
.igs .iges
model/step
.stp .step .p21
model/step+xml
.stpx .stpxz
model/x3d+xml
.x3d
model/x3d+binary
.x3db .x3dbz
model/x3d-vrml
.x3dv .x3dvz
model/vnd.3mf
.3mf
model/vnd.fbx
.fbx
model/vnd.opengex
.ogex
model/JT
.jt

TEXT (33 types)

text/html
.html .htm
text/css
.css
text/csv
.csv
text/plain
.txt .text .conf .log
text/markdown
.md .markdown
text/calendar
.ics .ical .ifb
text/vcard
.vcf .vcard
text/javascript
.js
text/event-stream
text/tab-separated-values
.tsv
text/xml
.xml
text/x-python
.py .pyw
text/x-java-source
.java
text/x-c
.c .h
text/x-ruby
.rb
text/x-go
.go
text/x-rust
.rs
text/x-kotlin
.kt .kts
text/x-swift
.swift
text/x-scala
.scala .sc
text/x-php
.php .php3 .php4 .php5 .phtml
text/x-diff
.diff .patch
text/uri-list
.uri .urls .uris
text/x-rst
.rst
text/x-asciidoc
.adoc .asciidoc
text/x-nfo
.nfo
text/x-asm
.asm .s
text/troff
.roff .me .ms .mm
text/x-ini
.ini .cfg .inf
text/x-tcl
.tcl .tk
text/x-fortran
.f .f90 .for .f95
text/x-yaml
.yaml .yml
text/cache-manifest
.appcache .manifest

VIDEO (21 types)

video/mp4
.mp4 .m4v
video/webm
.webm
video/ogg
.ogv
video/x-msvideo
.avi
video/quicktime
.mov .qt
video/x-matroska
.mkv .mk3d
video/mp2t
.ts .mts .m2ts
video/mpeg
.mpeg .mpg
video/3gpp
.3gp .3gpp
video/3gpp2
.3g2 .3gp2
video/x-ms-wmv
.wmv
video/x-ms-asf
.asf .asx
video/vnd.avi
.avi
video/iso.segment
.m4s
video/x-dv
.dv .dif
video/x-ms-vob
.vob
video/H264
video/H265
video/AV1
video/x-flv
.flv
video/x-f4v
.f4v

MULTIPART (9 types)

multipart/form-data
multipart/byteranges
multipart/mixed
multipart/alternative
multipart/digest
multipart/related
multipart/signed
multipart/encrypted
multipart/report
No MIME types match your search.

Web Font MIME Types: WOFF2, TTF, CORS, and @font-face

Web font MIME types affect both browser parsing and CORS enforcement. The font/ top-level type was registered in RFC 8081, which also formalised font/woff2 (WOFF2), font/woff (WOFF 1.0), font/ttf (TrueType), and font/otf (OpenType).1 Among these, font/woff2 is the only format worth serving to modern browsers: it uses Brotli compression on a single stream containing every font table, achieving smaller file sizes than WOFF 1.0's zlib compression and universal support across all browsers released since 2016.2 Cross-origin font loading triggers CORS enforcement in every browser, making Access-Control-Allow-Origin a required header on any font server accessed from a different domain. The CSS @font-face rule's format() hint in the src descriptor controls which font file the browser fetches.

Why WOFF2 is the only format worth serving to modern browsers

WOFF2 applies Brotli compression to a single concatenated stream of all font tables, producing smaller font files than WOFF 1.0's zlib compression and far smaller files than uncompressed TTF or OTF.2 WOFF2 support reached all major browsers by 2016: Chrome 36, Firefox 39, Safari 10, and Edge 14 all support it.3 For any project targeting browsers from 2016 forward, WOFF2 is sufficient as the sole format in a @font-face declaration. TTF and OTF are installation formats designed for desktop operating systems, not for HTTP delivery. Serving them over the web delivers uncompressed font data many times larger than the equivalent WOFF2. Furthermore, adding TTF to a @font-face src as a fallback increases HTTP requests without providing usable fallback coverage, since any browser capable of loading @font-face supports WOFF2. The only justified exception is Internet Explorer 11, which requires WOFF.

Cross-origin font loading and CORS enforcement

Every browser enforces CORS for fonts loaded from a different origin. When a CSS @font-face rule references a font URL on a CDN or a different domain, the browser sends an Origin header with the font request. The font server must include Access-Control-Allow-Origin: * or the specific page origin in the response.4 Without this header, the browser drops the font request and the page renders with its CSS fallback font stack. Detecting the issue requires examining the font request in the browser Network panel and looking for a CORS-related error in the response details.

Google Fonts and CORS

Google Fonts serves font files from a CDN with Access-Control-Allow-Origin: * already configured, so pages that reference fonts.googleapis.com work without any additional CORS setup.5 Self-hosted fonts on a CDN subdomain require explicit CORS configuration because the browser treats the CDN origin as separate from the page origin. In Nginx, add add_header Access-Control-Allow-Origin "*" inside a location block matching font file extensions. In Cloudflare, configure a custom header rule to add Access-Control-Allow-Origin for font paths.

@font-face format hints in CSS

The format() function in the @font-face src descriptor tells the browser the format of each font file before downloading it, allowing the browser to skip formats it does not support. The value for WOFF2 is "woff2". For WOFF, use "woff". For TTF, use "truetype". For OTF, use "opentype".6 Browsers evaluate the src list from left to right and download the first format they support. Placing WOFF2 first ensures modern browsers use the most compressed format. For projects that require IE 11 compatibility, include WOFF as a second src entry after WOFF2.

Variable fonts

Variable fonts use font/woff2 as the MIME type regardless of whether they are variable, because the variable font capabilities are internal to the font file and do not affect the Content-Type header the server sends. A single variable WOFF2 file can replace dozens of static font files covering every weight and width variant, which dramatically reduces the number of HTTP requests and the total font payload for your page. The @font-face format hint "woff2" applies to both static and variable WOFF2 files.6 Some implementations use "woff2-variations" as a hint, but this is not required by the specification and regular "woff2" is sufficient.

Reducing WOFF2 file size through Unicode subsetting

Full-featured fonts include glyphs for hundreds of languages and thousands of characters. A Latin-only project serving a complete Unicode WOFF2 font downloads glyph data for scripts it never renders. Font subsetting extracts only the character ranges the project uses, producing a smaller WOFF2 file. Google Fonts has applied subsetting automatically for years: each @font-face block from the Google Fonts CSS API includes a unicode-range descriptor limiting the download to the characters declared in that block.

The pyftsubset tool from the Python fonttools library performs offline subsetting, letting you extract specific Unicode ranges from a full font file to produce a smaller WOFF2 that contains only the characters your project needs.7 The unicode-range descriptor in @font-face works alongside subsetting: the browser downloads only the subset files covering characters present on the rendered page, making multi-file subset strategies practical without increasing initial page load.

Self-hosting subsetted fonts with Fontsource

Fontsource packages pre-subsetted Google Fonts files as npm packages, with separate WOFF2 files per Unicode range and pre-written @font-face declarations included that your bundler can import directly.8 Installing a Fontsource package adds WOFF2 files and CSS to node_modules, giving you full control over font hosting without relying on a third-party CDN. Self-hosting via Fontsource eliminates the external DNS lookups for fonts.googleapis.com and fonts.gstatic.com while preserving the same subsetting approach Google Fonts applies, which means your pages load faster and work offline during development.

Self-hosting also removes a third-party failure point, because a CDN outage at fonts.googleapis.com no longer blocks your text rendering or triggers a flash of fallback fonts during the outage. Bundling the subsetted files with your application keeps font delivery inside your own deploy pipeline and your own cache policy, and setting font/woff2 for self-hosted fonts removes the MIME gap that lets CORS drop the request. CapyToolkit's MIME reference confirms font/woff2 as the correct Content-Type for the served subset files.

When to use this

Use this guide when configuring a web server to serve fonts correctly to all browsers, setting up font hosting on a CDN, or debugging silent font loading failures caused by CORS or MIME type issues.

Examples

CSS @font-face with WOFF2 only for modern browsers

A single WOFF2 entry is sufficient for all browsers released since 2016. No TTF or OTF fallback is needed.

Nginx: serve WOFF2 with correct MIME type and CORS header

Add font/woff2 to the types block and configure CORS for cross-origin font loading.

@font-face with WOFF fallback for IE 11

Add WOFF only if IE 11 support is required. Modern browsers always pick WOFF2 first.

Sources
  1. 1.

    R. Levien, "The 'font' Top-Level Media Type," RFC 8081, IETF, February 2017. https://www.rfc-editor.org/rfc/rfc8081

  2. 2.

    W3C, "WOFF 2.0 - Web Open Font Format 2.0," w3.org, August 2024. https://www.w3.org/TR/WOFF2/

  3. 3.

    "Can I use... WOFF 2.0," caniuse.com, accessed June 2026. https://caniuse.com/woff2

  4. 4.

    Mozilla Developer Network, "@font-face," developer.mozilla.org, accessed June 2026. https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@font-face

  5. 5.

    Google, "Google Fonts Troubleshooting," developers.google.com, accessed June 2026. https://developers.google.com/fonts/docs/troubleshooting

  6. 6.

    W3C, "CSS Fonts Module Level 4," w3.org, February 2022. https://www.w3.org/TR/css-fonts-4/

  7. 7.

    "fontTools Subset Documentation," fonttools.readthedocs.io, accessed June 2026. https://fonttools.readthedocs.io/en/stable/subset/index.html

  8. 8.

    "Fontsource," fontsource.org, accessed June 2026. https://fontsource.org/

FAQ