October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
HTTP headers

Choosing the Right MIME Type for a Website Capture

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use text/html for a saved HTML page. If your capture includes separate files, label each response with its own media type: CSS as text/css, JavaScript as text/javascript, JSON as application/json, and images with the matching image/* type. If you are writing a WARC archive, the HTTP-response record has a different container-level value: application/http;msgtype=response. The right value depends on whether you are labeling the page, an individual resource, or the archive record.

This distinction matters because browsers use the HTTP MIME type—not a filename suffix—to decide how to process a response. Set the Content-Type header to describe the representation you actually send, and check the export requirements of the capture tool or reader you plan to use.

First identify what “website capture” means

The phrase can describe three different outputs. They share data, but they do not share one universal MIME type.

A standalone saved page

If the result is one HTML document, use text/html. This is the media type for the page representation itself. A file named page.html should still be served with the correct HTTP header when you make it available over HTTP.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A folder of downloaded resources

A normal page capture may contain an HTML document plus stylesheets, scripts, fonts, images and data responses. Preserve the type of each resource rather than assigning text/html to every file. The server that replays the capture should emit the original type in each response’s Content-Type header.

An archival package such as WARC

WARC is a container for records. For an HTTP response record, the WARC 1.0 specification says the record-level field should be application/http;msgtype=response. That value identifies the record payload as an HTTP response; it does not replace the payload response’s own media type, such as text/html or image/png. See the IIPC WARC 1.0 specification.

Which MIME type belongs to each captured file?

Captured content MIME type Practical note
HTML document text/html The page or document markup.
CSS stylesheet text/css A stylesheet sent as text/plain may not be applied as CSS.
JavaScript text/javascript MDN recommends this current type instead of legacy JavaScript labels.
JSON response application/json Use for structured JSON data, including captured API responses.
JPEG image image/jpeg Do not infer it from a .jpg name alone.
PNG image image/png Use when the bytes are a PNG image.
SVG image image/svg+xml SVG is an XML-based image format.
WebP image image/webp Use for WebP output.
Unknown binary data application/octet-stream Fallback when no more specific type is known.
WARC HTTP-response record application/http;msgtype=response Record-layer value, not the page or image type.

MDN’s MIME types guide explains that the media type describes the nature and format of a resource. Its HTTP basics page lists the common web values above.

Set the HTTP header, not just the extension

The HTTP Content-Type response header describes the representation before content encoding is applied. Compression such as gzip is a separate concern, communicated with Content-Encoding. Do not change the MIME type to reflect compression.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
HTML and CSS: Design and Build Websites
  • HTML CSS Design and Build Web Sites
  • Comes with secure packaging
  • It can be a gift option

For example, an HTML response should look conceptually like:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip

[compressed HTML bytes]

The charset parameter is commonly useful for text. It does not turn an image or WARC record into HTML. MDN documents the header’s semantics in Content-Type.

Why a filename is not enough

Browsers use the MIME type they receive to determine processing behavior, so renaming style.css to style.html does not make it HTML. Conversely, a file named download can still be correctly handled if the server sends its actual type. Some user agents perform MIME sniffing when headers are missing or suspicious, but relying on that creates inconsistent and potentially unsafe behavior. Send an accurate type and, where appropriate, an X-Content-Type-Options: nosniff header.

How to preserve types in a DIY capture

  1. Record the original response headers. For every URL fetched, save the status, headers and bytes. Keep redirects separate if your archive needs the full chain.
  2. Store the body without rewriting its format. Do not convert an image to another format while retaining the old type.
  3. Replay each resource with its recorded type. Serve the HTML response as text/html, the stylesheet as text/css, and so on.
  4. Separate archive metadata from payload metadata. In WARC, write the record’s Content-Type as application/http;msgtype=response for an HTTP response record, while retaining the embedded HTTP response header that identifies the payload.
  5. Test in the intended reader. Open the replay through HTTP rather than a file:// URL when possible, then inspect the browser’s network panel for blocked or misclassified resources.

Minimal replay examples

For a Python development server, place your captured files in a directory and serve them with a handler that maps extensions or, preferably, recorded metadata:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer

class CaptureHandler(SimpleHTTPRequestHandler):
    extensions_map = {
        **SimpleHTTPRequestHandler.extensions_map,
        '.js': 'text/javascript',
        '.json': 'application/json',
        '.webp': 'image/webp',
        '.svg': 'image/svg+xml',
    }

ThreadingHTTPServer(('127.0.0.1', 8000), CaptureHandler).serve_forever()

Extension mapping is only a fallback. If the original server returned a nonstandard URL or an extensionless resource, use the recorded header instead. Never guess a type from the path when you have the original response metadata.

Common mistakes and fixes

Everything is labeled text/html

Symptom: styles do not apply, scripts download as text, or images fail to render. Cause: the replay server assigned one type to every object. Fix: retain per-response headers and emit the actual type for each resource.

CSS arrives as text/plain

Symptom: the browser refuses to use the stylesheet. Fix: serve it as text/css and verify that the URL is not being redirected to an HTML error page.

JavaScript uses an obsolete label

Symptom: strict policies or tooling warn about the script type. Fix: use text/javascript, the current MDN guidance, and ensure the response body is actually JavaScript.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Sale
Web Design with HTML, CSS, JavaScript and jQuery Set
  • Brand: Wiley
  • Set of 2 Volumes
  • A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers

Images have the wrong image/* value

Symptom: a decoder reports a corrupt or unsupported image. Fix: inspect the magic bytes or original header, then use the matching type. Do not call a WebP file image/png because its URL ends in .png.

A WARC reader rejects the file

Symptom: the archive parser cannot classify an HTTP response record. Fix: check the WARC record field separately from the embedded HTTP headers and use application/http;msgtype=response for the response record as specified by WARC 1.0.

A blank page appears during replay

Check whether the capture preserved scripts, API responses, fonts and cross-origin headers. A correct MIME type cannot restore a resource that was never captured. Also check CSP, service-worker behavior and URL rewriting in the replay tool.

Capture format, compatibility and security decisions

Choose the output before choosing headers

  • Single HTML file: use text/html; embedded data URLs can eliminate external resource requests but may increase file size.
  • Self-contained folder: preserve a type for every resource and rewrite references consistently.
  • WARC: preserve HTTP exchanges and use the WARC record convention in addition to payload headers.

The cited standards do not define the export requirements of every capture application. If a tool has a proprietary package format, follow that tool’s documentation and confirm what its reader expects. The title does not identify a specific exporter, browser edition or replay library, so an application-specific command cannot be guaranteed here.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Do not confuse HTTP headers with HTML attributes

An HTTP Content-Type header travels with the response. An HTML element’s type attribute is markup metadata used in contexts such as scripts or links. They are related concepts but are not interchangeable. Set the HTTP header correctly even when the document also contains element attributes.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If you need a rendered screenshot rather than a standards-preserving archive, ScreenshotNeo returns PNG, JPEG, WebP or PDF from one request. It accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.

Use the API with the documented options at ScreenshotNeo’s documentation:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo includes full-page and element captures, 12 device presets plus custom viewports, retina scale, dark mode, PDF paper and page-range controls, custom CSS and JavaScript, click and wait actions, request blocking, headers, cookies, user agents, timezone and geolocation, transparent backgrounds, resizing, cache TTLs, signed links, asynchronous webhooks, bulk capture for 100 URLs per call, usage reporting and an OpenAPI specification. Parameters used by other screenshot APIs also work for easier migration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; yearly billing provides two months free, and every feature is available on every plan. Sign up for the free plan.

Cost and reliability checks

  • For an archive, storage and replay fidelity usually matter more than image format. Keep original headers and bytes so you can diagnose failures later.
  • For screenshots, decide whether you need a full page, a selector, a viewport preset or a PDF before setting output options.
  • Validate status codes, content length and checksums where reproducibility matters.
  • Record redirects, authentication requirements and cache behavior; a successful HTTP status does not guarantee that the body is the intended resource.

Frequently Asked Questions

Should I add a charset to every MIME type?

Use a charset parameter for text representations when the encoding is known, such as text/html; charset=UTF-8. It is not a substitute for an image, binary or WARC record media type.

Is application/octet-stream acceptable for an HTML capture?

Only when the specific format is genuinely unknown. For a known HTML document, send text/html; the generic binary type can cause download behavior instead of normal rendering.

Does WARC replace the original HTTP Content-Type?

No. WARC’s application/http;msgtype=response identifies the archive record layer. Retain the embedded HTTP response and its payload type, such as text/html or image/png.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read next

Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.