— Developer Tools

Free HAR File Viewer

Open a HAR from your browser’s Network panel to see every request, what failed and what was slow, then redact its secrets before you share it.

— Samples
Requests 6Failed 3Sensitive values 4Valid
Live

What is a HAR File Viewer?

A HAR file is a recording of everything a page asked the network for: each request, its timing, its response and its headers. This viewer turns one into a waterfall, a summary and a list of failures, without a browser’s dev tools.

It reads HAR 1.2 from Chrome, Edge, Firefox, Safari, Charles and Fiddler, including Chrome’s transfer sizes and blocked-request errors. Because HAR files carry cookies and auth headers, it also finds those values and writes a redacted copy you can safely attach to a ticket.

Key Features

Request Waterfall

Every request on one timeline, with its start offset, duration and status, and the wait for the first byte shaded.

Page Load Summary

Totals, DOMContentLoaded and load times, status classes, bytes by type, and the slowest and largest requests.

Failures in One List

4xx and 5xx responses plus requests that never got an answer, such as ones blocked by an ad blocker.

Secrets Found and Removed

Cookies, Authorization headers and tokens in URLs or bodies are listed by name, and Redact replaces their values.

Opened Locally

The HAR is read in your browser and never uploaded, which matters for a file full of session cookies.

Perfect for everyone

  • Developers and QA engineers debugging slow or failing pages
  • Support teams who receive HAR files
  • Anyone asked to send one

How to Use the HAR File Viewer

Export a HAR, open it here, and read it from the waterfall to the secrets.

1

Export the HAR

In the Network panel, tick Preserve log, reload, reproduce the problem, then choose Save all as HAR or Export HAR.

2

Open It

Use Open .har file or paste the JSON. Large exports with response bodies can run to tens of megabytes.

3

Find the Problem

Waterfall shows what was slow and what waited on what. Errors lists every failed request with its reason.

4

Redact Before Sharing

Check Sensitive for cookies and tokens, then switch to Redact and download the cleaned copy to send.

Worked Examples

HAR Files, Read

Each row is a HAR file, trimmed to the fields that matter, and each answer is this viewer’s output in the mode on the chip. Find the slow request before you reveal it.

REF_001Waterfall, three requests

“{"log":{"version":"1.2","entries":[{"startedDateTime":"2026-10-25T09:14:02.000Z","time":312.4,"request":{"method":"GET","url":"https://news.example.org/"},"response":{"status":200,"content":{"size":0,"mimeType":"text/html"},"_transferSize":18250},"_resourceType":"document","timings":{"blocked":1,"dns":-1,"connect":-1,"send":0,"wait":240.1,"receive":71.29999999999998}},{"startedDateTime":"2026-10-25T09:14:02.340Z","time":96.2,"request":{"method":"GET","url":"https://news.example.org/main.js"},"response":{"status":200,"content":{"size":0,"mimeType":"application/javascript"},"_transferSize":71420},"_resourceType":"script","timings":{"blocked":1,"dns":-1,"connect":-1,"send":0,"wait":31.0,"receive":64.2}},{"startedDateTime":"2026-10-25T09:14:02.351Z","time":58.7,"request":{"method":"GET","url":"https://fonts.example.net/inter.woff2"},"response":{"status":200,"content":{"size":0,"mimeType":"font/woff2"},"_transferSize":48112},"_resourceType":"font","timings":{"blocked":1,"dns":-1,"connect":-1,"send":0,"wait":20.4,"receive":37.300000000000004}}]}}”

REF_002Summary with page timings

“{"log":{"version":"1.2","creator":{"name":"WebInspector","version":"537.36"},"pages":[{"id":"page_1","title":"https://news.example.org/","pageTimings":{"onContentLoad":455.0,"onLoad":702.3}}],"entries":[{"startedDateTime":"2026-10-25T09:14:02.000Z","time":312.4,"request":{"method":"GET","url":"https://news.example.org/"},"response":{"status":200,"content":{"size":0,"mimeType":"text/html"},"_transferSize":18250},"_resourceType":"document"},{"startedDateTime":"2026-10-25T09:14:02.340Z","time":96.2,"request":{"method":"GET","url":"https://news.example.org/main.js"},"response":{"status":200,"content":{"size":0,"mimeType":"application/javascript"},"_transferSize":71420},"_resourceType":"script"},{"startedDateTime":"2026-10-25T09:14:02.520Z","time":1840.0,"request":{"method":"GET","url":"https://news.example.org/api/headlines"},"response":{"status":500,"content":{"size":0,"mimeType":"application/json"},"_transferSize":310,"statusText":"Internal Server Error"},"_resourceType":"fetch"}]}}”

REF_003Errors, including a blocked request

“{"log":{"version":"1.2","entries":[{"startedDateTime":"2026-10-25T09:14:02.000Z","time":140.0,"request":{"method":"GET","url":"https://app.example.com/dashboard"},"response":{"status":200,"content":{"size":0,"mimeType":"text/html"}},"_resourceType":"document"},{"startedDateTime":"2026-10-25T09:14:02.300Z","time":88.5,"request":{"method":"GET","url":"https://app.example.com/api/me"},"response":{"status":401,"content":{"size":0,"mimeType":"application/json"},"statusText":"Unauthorized"},"_resourceType":"fetch"},{"startedDateTime":"2026-10-25T09:14:02.310Z","time":41.0,"request":{"method":"GET","url":"https://cdn.example.com/logo.svg"},"response":{"status":404,"content":{"size":0,"mimeType":"text/html"},"statusText":"Not Found"},"_resourceType":"image"},{"startedDateTime":"2026-10-25T09:14:02.400Z","time":0.3,"request":{"method":"GET","url":"https://tracker.example.net/pixel.gif"},"response":{"status":0,"content":{"size":0,"mimeType":""},"_error":"net::ERR_BLOCKED_BY_CLIENT"},"_resourceType":"image"}]}}”

REF_004Sensitive values in one request

“{"log":{"version":"1.2","entries":[{"startedDateTime":"2026-10-25T09:14:02.000Z","time":120.0,"request":{"method":"GET","url":"https://api.example.com/v2/orders?access_token=ya29.a0Af","headers":[{"name":"Authorization","value":"Basic YWRhOmh1bnRlcjI="},{"name":"Accept","value":"application/json"}],"cookies":[{"name":"csrftoken","value":"Xk2"}],"queryString":[{"name":"access_token","value":"ya29.a0Af"}]},"response":{"status":200,"content":{"size":0,"mimeType":"application/json"}},"_resourceType":"fetch"}]}}”

REF_005Redacted login request

“{"log":{"version":"1.2","entries":[{"startedDateTime":"2026-10-25T09:14:02.000Z","time":95.0,"request":{"method":"POST","url":"https://auth.example.com/login","postData":{"mimeType":"application/json","text":"{\"email\":\"ada@example.com\",\"password\":\"hunter2\"}"}},"response":{"status":302,"content":{"size":0,"mimeType":"text/html"},"cookies":[{"name":"session","value":"abc123"}]}}]}}”

REF_006Summary of a Firefox HAR

“{"log":{"version":"1.2","creator":{"name":"Firefox","version":"133.0"},"entries":[{"startedDateTime":"2026-10-25T11:14:02.000+02:00","time":205,"request":{"method":"GET","url":"https://docs.example.dev/"},"response":{"status":200,"bodySize":9120,"headersSize":410,"content":{"size":33100,"mimeType":"text/html; charset=utf-8"}},"timings":{"blocked":0,"dns":12,"connect":30,"ssl":18,"send":0,"wait":140,"receive":23}},{"startedDateTime":"2026-10-25T11:14:02.260+02:00","time":61,"request":{"method":"GET","url":"https://docs.example.dev/style.css"},"response":{"status":304,"bodySize":0,"headersSize":280,"content":{"size":15200,"mimeType":"text/css"}},"timings":{"blocked":0,"dns":-1,"connect":-1,"send":0,"wait":58,"receive":3}}]}}”

REF_007Waterfall with a slow API call

“{"log":{"version":"1.2","creator":{"name":"WebInspector","version":"537.36"},"pages":[{"id":"page_1","title":"https://news.example.org/","pageTimings":{"onContentLoad":455.0,"onLoad":702.3}}],"entries":[{"startedDateTime":"2026-10-25T09:14:02.000Z","time":312.4,"request":{"method":"GET","url":"https://news.example.org/"},"response":{"status":200,"content":{"size":0,"mimeType":"text/html"},"_transferSize":18250},"_resourceType":"document"},{"startedDateTime":"2026-10-25T09:14:02.340Z","time":96.2,"request":{"method":"GET","url":"https://news.example.org/main.js"},"response":{"status":200,"content":{"size":0,"mimeType":"application/javascript"},"_transferSize":71420},"_resourceType":"script"},{"startedDateTime":"2026-10-25T09:14:02.520Z","time":1840.0,"request":{"method":"GET","url":"https://news.example.org/api/headlines"},"response":{"status":500,"content":{"size":0,"mimeType":"application/json"},"_transferSize":310,"statusText":"Internal Server Error"},"_resourceType":"fetch"}]}}”

REF_008Exported before anything loaded

“{"log":{"version":"1.2","creator":{"name":"WebInspector","version":"537.36"},"pages":[],"entries":[]}}”

REF_009A request list, not a HAR

“[{"url":"https://example.com/","status":200,"time":120}]”

REF_010A date that isn’t ISO 8601

“{"log":{"version":"1.2","entries":[{"startedDateTime":"25/10/2026 09:14:02","time":50,"request":{"method":"GET","url":"https://example.com/"},"response":{"status":200}}]}}”

HAR Fields

What’s Inside a HAR File

HAR is JSON with one log object. These ten fields are the ones this viewer reads and that you’ll look at most.

01 / LOGVERSION

log.version and log.creator

The format version, almost always 1.2, and the tool that wrote the file, such as WebInspector for Chrome.

“Which creator name does Chrome write?”

02 / PAGES

pages and pageTimings

One entry per page load, with onContentLoad and onLoad in milliseconds from the page’s start.

“Which page timing matches DOMContentLoaded?”

03 / ENTRIES

entries

One object per request, in the order the browser recorded them. Everything else in this list sits inside an entry.

“Where is each request stored?”

04 / STARTEDDATETIME

startedDateTime

When the request started, as an ISO 8601 date with milliseconds and a time zone offset.

“What date format does HAR use?”

05 / TIME

time

The request’s total time in milliseconds, the sum of its timings except ssl, which is already inside connect.

“Is ssl added to time separately?”

06 / REQUEST

request

Method, URL, HTTP version, headers, query string, cookies and any posted body.

“Where are posted form fields?”

07 / RESPONSE

response

Status, headers, cookies and the content object, whose size is the decoded body and mimeType its type.

“What does content.size measure?”

08 / TIMINGS

timings

blocked, dns, connect, ssl, send, wait and receive, in milliseconds. A value of -1 means the phase didn’t happen.

“What does -1 mean in timings?”

09 / TRANSFERSIZE

_transferSize

Chrome’s extension for bytes over the network, headers included. Other browsers leave it out, so bodySize and headersSize stand in.

“Is _transferSize part of HAR 1.2?”

10 / ERROR

_error

Chrome’s reason for a request with no response, such as net::ERR_BLOCKED_BY_CLIENT or net::ERR_NAME_NOT_RESOLVED.

“What status does such a request have?”

What Each Timing Phase Means

A request’s time is split into phases, recorded in milliseconds. Knowing which phase is long tells you whether to look at the network, the connection or the server.

blocked

Time queued before the request could start, often waiting for a free connection or behind higher-priority requests.

dns

Looking up the host name. It’s -1 when the browser already knew the address.

connect and ssl

Opening the TCP connection, with the TLS handshake counted inside it. Reused connections show -1.

send

Sending the request. It’s near zero unless the request uploads a large body.

wait

Time to first byte: the server thinking. A long wait points at the backend, not the network.

receive

Downloading the response. A long receive points at a large body or a slow connection.

Exporting a HAR File

Every major browser and debugging proxy can save one. A few settings make the file far more useful.

Tip 01

Chrome and Edge

Open DevTools, go to Network, and use the download arrow. Recent Chrome versions leave out cookies and auth headers unless you allow sensitive data in settings.

Tip 02

Firefox

In the Network panel, right-click any request and choose Save All As HAR. Firefox includes cookies and headers.

Tip 03

Safari

Turn on the Develop menu, open Web Inspector’s Network tab, and use Export. Safari’s HAR includes headers.

Tip 04

Preserve Log

Tick Preserve log before reproducing a problem, or a redirect or reload clears the requests you needed.

Tip 05

Disable Cache

With Disable cache ticked, timings reflect a first visit instead of files served from the browser’s cache.

Tip 06

Charles and Fiddler

Proxies record every app on the machine, not just one tab, and both export HAR from their File menus.

Reading Sizes in a HAR

A HAR records two sizes for most responses, and they rarely match. Knowing which is which explains most surprises in a page’s weight, and why the numbers differ from the file sizes on the server.

Transferred Versus Content

Transferred counts bytes on the wire, headers included, after compression. Content is the decoded body, so a well-compressed script shows a much larger content size.

304 Not Modified

A revalidated file transfers only headers, a few hundred bytes, while its content size still shows the cached body. That’s the cache working, not a missing file.

Served From Cache

Responses from the memory or disk cache transfer nothing at all. Chrome marks them with a zero transfer size, so they drop out of the transferred total.

Compression

Text such as HTML, CSS and JavaScript should be served with gzip or Brotli. A text file whose transferred size is close to its content size probably isn’t compressed.

Unknown Sizes

Firefox and Safari don’t write _transferSize, and bodySize is -1 when the browser doesn’t know it. Such requests are left out of the transferred total rather than guessed.

What Redact Changes, and What It Doesn’t

Redact is a fast first pass, not a guarantee. Read the Sensitive list, then skim the redacted file yourself before it leaves your hands, especially for apps with custom auth schemes.

Tip 01

Headers and Cookies

Values of Authorization, Cookie, Set-Cookie, API key and CSRF headers are replaced, along with every cookie in the request and response cookie lists. Their names stay, so the file still explains itself.

Tip 02

URLs and Query Strings

Parameters named like tokens, keys, sessions, codes or signatures are replaced in both the URL and the queryString list. Other parameters, such as page numbers, are kept.

Tip 03

Posted Bodies

Form fields and JSON keys with sensitive names, such as password or client_secret, are replaced inside request bodies. Bodies in other formats are left as they are, so check them.

Tip 04

Response Bodies

Every response body is removed, because pages and API replies often contain personal data. Status, headers and sizes stay, which is enough for most debugging.

Tip 05

Custom Header Names

A token in a header with an unusual name, such as X-Shop-Session, isn’t recognised. Search the redacted file for your own app’s header names before sharing it.

Tip 06

Tokens Inside Paths

Secrets placed in the URL path itself, such as a reset link like /reset/abc123, aren’t detected. Replace those by hand or remove the request.

When to Open a HAR File

Whenever someone hands you a recording of a page instead of access to it.

Support Tickets

Read the HAR a customer sent to find the failing request, without opening dev tools on their behalf.

Before Sending One

Check your own HAR for cookies and tokens and redact them before attaching it to a ticket or forum post.

Slow Page Investigations

See whether the delay is the server’s wait, a heavy script, or a chain of requests that run one after another.

Third-Party Audits

List every host a page contacts, with what each one sent, to review trackers and dependencies.

QA Bug Reports

Attach a redacted HAR to a bug so developers can see the exact requests and responses.

HAR File Pitfalls

HAR files are easy to misread, and riskier to share than they look.

Tip 01

Sharing Live Session Cookies

A HAR can hold cookies that log anyone in as you. In 2023, attackers used session tokens taken from HAR files uploaded to Okta’s support system.

Tip 02

Redacting Only Headers

Tokens also hide in URLs, posted JSON and response bodies. Check every place, which is what Sensitive does.

Tip 03

Reading Cached Requests as Fast

Responses from the memory or disk cache show tiny times that say nothing about the server.

Tip 04

Blaming the Network for Wait

A long wait phase is server time. Faster hosting or a CDN won’t fix a slow database query.

Tip 05

Counting Blocked Requests as Outages

Status 0 with ERR_BLOCKED_BY_CLIENT means an extension stopped it, usually an ad blocker, not that the server failed.

Tip 06

Comparing Different Network Conditions

Throttling, VPNs and Wi-Fi change every timing. Record before and after on the same connection.

Tip 07

Huge Files With Bodies

Response bodies can make a HAR hundreds of megabytes. Clear the panel and record only the steps that show the problem.

Frequently Asked Questions