v139 · Web Platform · MIME Types
Content Negotiation Tester
Type any MIME type and instantly see if Chrome 139 treats it as JSON, which spec rule matched, and how the essence is extracted from a full Content-Type header including parameters.
mime type classifier
parsed essence (parameters stripped)
JSON MIME type?
Enter a MIME type above
browser JSON module probe
Use the current MIME type as the media type for a JSON module data: URL. The probe imports with { with: { type: "json" } } when the classifier says the essence is JSON; non-JSON and malformed values are blocked first so the page shows a clean fallback path.
Not run yet.
types that changed in Chrome 139
Before Chrome 139, only application/json and text/json were accepted as JSON. Chrome 139 aligns with the WHATWG MIME Sniff spec, adding any subtype ending in +json.
| MIME type | Chrome <139 | Chrome 139+ | change |
|---|---|---|---|
application/json | JSON | JSON | — |
text/json | JSON | JSON | — |
application/ld+json | rejected | JSON | now JSON |
application/vnd.api+json | rejected | JSON | now JSON |
application/manifest+json | rejected | JSON | now JSON |
application/problem+json | rejected | JSON | now JSON |
application/json; charset=utf-8 | JSON | JSON | — (params stripped) |
text/plain | rejected | rejected | — |
text/html | rejected | rejected | — |
// WHATWG mimesniff §4.6 — spec algorithm in JS
function parseEssence(rawContentType) {
// Strip parameters: "application/json; charset=utf-8" → "application/json"
return rawContentType.split(';')[0].trim().toLowerCase();
}
function isJSONMIMEType(rawContentType) {
const essence = parseEssence(rawContentType);
const [, subtype] = essence.split('/');
if (!subtype) return false;
// Rule 1: literal essences
if (essence === 'application/json') return true;
if (essence === 'text/json') return true;
// Rule 2: structured syntax suffix — new in Chrome 139
if (subtype.endsWith('+json')) return true;
return false;
}