Network Tab Debugging
Practical DevTools Network panel cheatsheet for filtering requests, throttling, copying as cURL or fetch, inspecting timing, and replaying or blocking calls.
Code
Network Tab Debugging Cheatsheet
The DevTools Network panel records every request a page makes. This cheatsheet covers the
moves you use daily: filtering traffic, throttling the connection, copying requests as cURL or
fetch(), reading headers and the timing waterfall, and replaying or blocking individual calls.
Examples target Chrome / Edge DevTools, with Firefox notes where it differs.
Open it
Cmd+Option+I (macOS) โ click "Network"
Ctrl+Shift+I (Windows/Linux) โ click "Network"
Cmd+Option+J / Ctrl+Shift+J โ opens the Console; switch to Network tab
Tip: leave the panel open and reload (Cmd+R / Ctrl+R) so requests are captured from the start.
Filtering requests
Use the Filter box and the type tabs (All, Fetch/XHR, JS, CSS, Img, Doc, WS, Font, Media).
Plain text status โ matches URL, substring match
-png status โ negation: hide anything containing "png"
/api/users status โ URL substring
Filter-box operators (combine with space; all must match):
status-code:404 only 404 responses
status-code:-200 everything except 200
method:POST only POST requests
domain:api.example.com only that host (supports * wildcard)
mime-type:application/json by response MIME type
larger-than:100k responses bigger than 100 KB (also 1M, 500)
has-response-header:Set-Cookie
scheme:https
resource-type:fetch fetch | xhr | script | stylesheet | image | document | websocket
is:running in-flight requests
is:from-cache served from cache
priority:high
-domain:fonts.googleapis.com exclude a domain
Useful toggles in the toolbar:
Preserve log keep requests across page navigations / reloads
Disable cache bypass cache while DevTools is open
Invert show everything the filter does NOT match
Throttling (simulate slow connections)
Use the throttling dropdown (defaults: "No throttling", "Fast 4G", "Slow 4G", "3G", "Offline").
Network panel โ throttling dropdown โ pick a preset, or "Offline"
Add a custom profile:
Throttling dropdown โ "Addโฆ" โ set Download / Upload (kbps) + Latency (ms) โ name it
Apply throttling everywhere (not just the Network panel) and emulate CPU slowdown:
Cmd+Shift+P / Ctrl+Shift+P โ "Show Performance" โ CPU dropdown (4x / 6x slowdown)
Remember to set it back to No throttling when done โ it persists between reloads.
Copy as cURL / fetch / PowerShell
Right-click any request โ Copy submenu:
Copy โ Copy as cURL (bash)
Copy โ Copy as cURL (bash) macOS/Linux variant
Copy โ Copy as cURL (cmd) Windows
Copy โ Copy as PowerShell
Copy โ Copy as fetch browser fetch() with headers + body
Copy โ Copy as Node.js fetch for running in Node
Copy โ Copy all as HAR export the whole session
Copy โ Copy response the response body only
Example pasted from "Copy as cURL":
curl 'https://api.example.com/v1/users?page=2' \
-H 'accept: application/json' \
-H 'authorization: Bearer eyJhbGci...' \
--compressed
Example pasted from "Copy as fetch":
fetch("https://api.example.com/v1/users?page=2", {
headers: {
accept: "application/json",
authorization: "Bearer eyJhbGci...",
},
method: "GET",
});
Inspecting headers, timing & the waterfall
Click a request to open its detail tabs:
Headers โ General (URL, method, status), Request & Response headers, query params
Payload โ form data / request body (JSON shown parsed)
Preview โ rendered/pretty view of the response
Response โ raw response body
Initiator โ what triggered the request (call stack / chain)
Timing โ phase breakdown (see below)
Cookies โ request + response cookies
The Timing tab breaks one request into phases:
Queueing waiting for a connection slot / higher-priority requests
Stalled time before the request could be sent
DNS Lookup resolving the hostname
Initial connection TCP handshake
SSL TLS negotiation
Request sent uploading the request
Waiting (TTFB) server processing โ time to first byte
Content Download receiving the response body
Reading the waterfall column (right side of the request list):
Long Waiting (TTFB) โ slow backend / DB
Long Content Download โ big payload or slow link (check Size column)
Long Queueing/Stalled โ connection contention or too many parallel requests
Gaps between bars โ requests are serialized; look for blocking dependencies
Add the Size and Time columns (right-click the column header) to spot heavy/slow calls fast.
Replaying a request
Right-click request โ "Replay XHR" re-send a fetch/XHR exactly as captured
To tweak before replaying, use Override/edit-and-resend:
Right-click request โ "Edit and resend" (Chrome 130+) edit URL/method/headers/body, send
In Firefox the same feature is:
Right-click request โ "Resend" or "Edit and Resend"
Or copy as fetch and run it in the Console to modify and re-fire:
// paste a "Copy as fetch" snippet, edit headers/body, then:
await fetch("https://api.example.com/v1/users", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ name: "test" }),
}).then((r) => r.json());
Blocking requests
Block a URL or whole pattern to test fallbacks and failure handling.
Right-click request โ "Block request URL" blocks that exact URL
Right-click request โ "Block request domain" blocks the whole host
Manage and add patterns in the Network request blocking panel:
Cmd+Shift+P / Ctrl+Shift+P โ "Show Network request blocking"
โ "Add patternโฆ" e.g. *://*.example.com/analytics/* or *.js
โ tick "Enable network request blocking"
Blocked requests appear red with status (blocked:devtools).
Common workflows
1. Reproduce a failing API call in the terminal
1. Filter: status-code:500 method:POST
2. Click the request โ check Payload + Response for the error
3. Right-click โ Copy โ Copy as cURL
4. Paste in terminal, tweak headers/body, re-run until you isolate the cause
2. Find why the page is slow
1. Disable cache + reload with the panel open
2. Sort by the Time column (or scan the waterfall)
3. Open the slowest request โ Timing tab
4. Long Waiting (TTFB) โ backend; long Content Download โ trim/compress the payload
3. Test offline / flaky-connection behavior
1. Throttling dropdown โ "Slow 4G" (or "Offline")
2. Reload and walk through the flow
3. Confirm spinners, retries, and error states behave
4. Reset to "No throttling"
4. Verify the app survives a dead third-party script
1. Right-click the third-party request โ "Block request domain"
2. Reload โ confirm the page still renders and no JS errors cascade
3. Remove the block pattern when finished
Gotchas / tips
- Preserve log is off by default โ redirect/login flows wipe the list on navigation. Turn it on.
- Disable cache only works while DevTools is open; closing it restores normal caching.
- Throttling and request blocking persist across reloads โ reset them or you'll chase ghosts.
- "Copy as cURL" includes your auth tokens and cookies; treat pasted commands as secrets.
- "Copy as cURL (cmd)" vs "(bash)" matters on Windows โ quoting differs; pick the right shell.
- TTFB shown in DevTools includes network latency, not just server time โ throttle off for true numbers.
- WebSocket frames live under the WS filter โ click the connection โ Messages tab.
- Export a HAR file (Copy all as HAR) to share a full capture with teammates or attach to a bug.
- Firefox/Safari label things differently (e.g. "Resend" vs "Edit and resend") but the concepts map 1:1.
Network Tab Debugging
A pocket reference for working the browser DevTools Network panel like a pro: filter noisy
traffic down to the request you care about, simulate slow connections, copy any request as
cURL or fetch(), read the timing waterfall, and replay or block individual calls.
What this skill is
A concise, copy-pasteable cheatsheet covering the everyday Network-panel moves that front-end and full-stack developers reach for when an API call misbehaves, a page is slow, or a request needs to be reproduced outside the browser.
When to use it
Reach for it when you need to: confirm what a page actually sent, reproduce a failing call in the terminal, measure where latency hides in the waterfall, or test how the app behaves on a flaky connection.
Full cheatsheet
The complete reference lives in the snippet: see snippets/markdown.md.