keepcalculator

06 Numbers and Powers

Invalid Media Type Errors: Syntax & Support Fixes

Card No. 06·2011 · Updated · Standard formula, shown below

Invalid media type errors usually mean your HTTP request or server configuration is rejecting a file because its Content-Type header doesn’t match what the endpoint expects. Fixing it involves checking the header syntax, confirming the file extension matches the MIME type, and verifying the server or API supports that type. Below is a practical guide to diagnosing and resolving these errors across common platforms.

What Causes Invalid Media Type Errors

The error appears when a client sends a request with a Content-Type or Accept header that the server cannot parse or does not allow. Common scenarios include:

  • Uploading a file with a MIME type that the server’s whitelist rejects (e.g., sending application/json when the endpoint only accepts multipart/form-data).
  • Using a malformed header like Content-Type: application/json; charset=utf-8 when the server expects no parameters.
  • Misconfigured server rules that map file extensions to wrong MIME types (e.g., treating .js as text/plain).
  • Client-side libraries that automatically set a header you didn’t intend (e.g., fetch adding text/plain;charset=UTF-8 for string bodies).

The error is not a network problem; it’s a contract mismatch between what you send and what the server accepts.

How to Check Your Content-Type Syntax

Start by inspecting the exact header your request sends. Use browser DevTools (Network tab) or a tool like curl with verbose output:

curl -v -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/endpoint

Look for these common syntax mistakes:

  • Missing slash – applicationjson is invalid; must be application/json.
  • Wrong case – MIME types are case-insensitive, but some servers are picky; always use lowercase.
  • Extra spaces – application/json ; charset=utf-8 has a space before the semicolon; remove it.
  • Incorrect parameter separator – Use semicolons, not commas: application/json; charset=utf-8.
  • Quoted values – Some servers choke on quotes around the type: "application/json" is wrong.

If your request body is JSON, the header must be application/json. If it’s form data, use multipart/form-data (with a boundary) or application/x-www-form-urlencoded.

Check File Extension vs. MIME Type Mapping

The server often decides the media type based on the file extension. A mismatch between the extension and the declared Content-Type triggers the error. For example, uploading a .txt file but sending Content-Type: image/png will fail. Verify the mapping on your server:

  • Apache: Check .htaccess or mime.types file. Add a line like AddType application/json .json if missing.
  • Nginx: Check mime.types include file; ensure types { application/json json; } exists.
  • Node.js (Express): Use express.json() middleware to parse JSON bodies; it automatically sets the correct type.
  • Python (Flask/Django): Flask’s request.get_json() requires the Content-Type to be application/json; otherwise it returns None.

If you’re using a cloud storage service (AWS S3, Azure Blob), the Content-Type is stored as metadata. You can update it after upload using the SDK or console.

Server-Side Configuration Fixes

If the client request looks correct, the problem may be server-side. Common fixes:

  1. Enable the missing MIME type – On IIS, add a MIME type in the web.config or IIS Manager. On Apache, use AddType.
  2. Check framework middleware – For Express, ensure app.use(express.json()) is before your routes. For Django REST Framework, set DEFAULT_PARSER_CLASSES to include JSONParser.
  3. Validate the Accept header – Some APIs require the client to send Accept: application/json as well. If missing, the server may respond with 406 Not Acceptable, which is sometimes reported as invalid media type.
  4. Restart the server – After changing MIME config, a restart is often required for changes to take effect.

If you’re using a reverse proxy (like nginx in front of a Node app), ensure the proxy doesn’t strip or override the Content-Type header.

Common Scenarios and Their Fixes

  • Uploading an image to a form – Use multipart/form-data; do not set Content-Type manually; the browser adds the boundary.
  • Sending JSON via fetch – Set Content-Type: application/json and use JSON.stringify() as the body.
  • Posting XML to a SOAP API – Use text/xml or application/soap+xml depending on the service.
  • CSV upload – Use text/csv; some servers accept application/vnd.ms-excel for legacy reasons.
  • Webhook payloads – Many services require exactly application/json; check their docs for the exact header.

Tools to Debug Invalid Media Type Errors

Use these to isolate the problem:

  • Postman – Set the header manually and inspect the raw request; it shows the exact bytes sent.
  • curl – Use -v to see request and response headers.
  • Browser DevTools – Look at the request headers under the Network tab; copy as cURL to reproduce.
  • Online MIME type checkers – Verify what a file extension should map to (e.g., .json = application/json).
  • Server logs – Check the access/error logs; they often include the rejected Content-Type.

If you’re behind a corporate proxy, it might modify headers. Test from a different network to rule that out.

Support Options and When to Ask

If you’ve verified the header and server config, the issue may be with a third-party API. Before contacting support, gather:

  • The exact error message and HTTP status code.
  • The full request headers (redact sensitive data).
  • The request body (or a sample).
  • Your server logs showing the request.

Most API providers have a status page and documentation; search for “invalid media type” in their docs. If you’re using a framework (Express, Django, Spring), check its issue tracker for known bugs. For cloud services, open a support ticket with the request ID if available.

Frequently Asked Questions

What is the difference between Content-Type and Accept?

Content-Type tells the server what format the request body is in. Accept tells the server what format the response should be. If you send a JSON body, Content-Type must be application/json. If you want JSON back, Accept should be application/json. Many APIs ignore Accept and always return JSON, but some use it for content negotiation.

Why does my browser upload fail but curl works?

Browsers automatically set Content-Type to multipart/form-data when you submit a form with a file input. If your server expects application/json, it will reject the multipart request. Use JavaScript to read the file and send it as JSON (base64 or FormData with correct header) or change the server to accept multipart.

Can I send a file as application/octet-stream?

Yes, but only if the server accepts that type. It’s a generic binary type; some APIs use it for raw file uploads. If the server expects a specific type like image/png, sending octet-stream will fail. Check the API documentation for allowed types.

How do I fix an invalid media type error in Postman?

In Postman, go to the Headers tab and manually add Content-Type with the correct value. If you’re using raw JSON body, Postman sometimes auto-sets the header; override it. Also check the Body tab’s dropdown – selecting “raw” and “JSON” sets the header automatically.

Does the file extension matter if I set the Content-Type manually?

Yes, on many servers. The server may validate that the extension matches the declared type. For example, uploading a .jpg with Content-Type: image/png might be rejected. Rename the file to match the type, or configure the server to trust the header.

What does “415 Unsupported Media Type” mean?

It’s the HTTP status code for invalid media type. The server understood the request but refuses to process it because the Content-Type is not supported. The fix is to change the header to a supported type, as listed in the server’s documentation or response’s Allow header.

Related

Method: the standard formula for this calculation, rounded as each result states. See how the calculators work or report an error.

More cards in this drawer

The whole Numbers and Powers drawer →