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/jsonJSONJSON
text/jsonJSONJSON
application/ld+jsonrejectedJSONnow JSON
application/vnd.api+jsonrejectedJSONnow JSON
application/manifest+jsonrejectedJSONnow JSON
application/problem+jsonrejectedJSONnow JSON
application/json; charset=utf-8JSONJSON— (params stripped)
text/plainrejectedrejected
text/htmlrejectedrejected
// 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;
}

see also