โœฆ StealThis .dev

Network Tab Debugging

Practical DevTools Network panel cheatsheet for filtering requests, throttling, copying as cURL or fetch, inspecting timing, and replaying or blocking calls.

devtools
Targets: Markdown

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.