| |

Internet Beginner 10 🌐 Inspecting Networks with Browser DevTools

ā±ļø Estimated read: 14 min | |

Every page load is a conversation between your browser and a server, but the conversation is invisible. You see the result—the rendered page—but not the requests that fetched it, the headers that carried the metadata, or the timing that explains why one resource arrived instantly while another took two seconds. Browser DevTools makes that conversation visible. The Network panel records every request the page makes, shows the status code and response headers, and visualizes the timing breakdown that reveals whether a delay came from the server, the network, or the browser itself.

The Network panel is not just for debugging broken requests. It is the primary tool for understanding performance. A page that feels slow might be slow because the server is responding slowly, because a large image is downloading over a throttled connection, or because the browser is queuing requests behind a limit. Each of those causes produces a different pattern in the waterfall, and the Network panel shows exactly which one is happening . Learning to read that waterfall is the difference between guessing at performance problems and diagnosing them.

This chapter covers how to open and record network activity, how to inspect individual requests and their headers, how to read the timing waterfall, how to throttle the connection to simulate slower networks, and how to copy requests as cURL or fetch commands for reproduction.

Key point: The Network panel records every request the page makes and shows its status, headers, response body, and timing breakdown; the waterfall visualizes the stages of each request, and throttling simulates slower connections to reveal performance problems that fast local networks hide.


Why the Network panel is the primary debugging tool

The invisible request problem. When a page loads, the browser makes dozens of requests: the HTML document, stylesheets, scripts, images, fonts, and API calls. If one of them fails—a 404, a 500, a CORS error—the page may render incorrectly or not at all. Without the Network panel, you see the symptom but not the cause. The panel shows which request failed, what status code it returned, and what the server said in the response .

The performance attribution problem. A slow page could be slow for many reasons. The server might take two seconds to process an API call. The network might be slow. The response body might be huge. The browser might be queuing requests because too many are in flight to the same domain. The timing tab breaks a request into stages—queueing, DNS lookup, initial connection, SSL, request sent, waiting (TTFB), and content download—and each stage points to a different cause . The waterfall shows these stages as colored bars, making the bottleneck visible at a glance .

The reproduction problem. When you find a bug in an API call, you need to reproduce it outside the browser. The Network panel lets you right-click any request and copy it as a cURL command or a fetch call, complete with headers and body . This turns a browser-only observation into a script you can run in a terminal, share with a backend developer, or add to a bug report.

The slow-network problem. Your development machine is probably on a fast connection. Your users are not. Throttling the Network panel to 3G or Slow 4G simulates the conditions your users actually experience, revealing loading problems that are invisible on a fast connection . A page that loads in 200 milliseconds locally might take five seconds on a slow mobile network, and the Network panel shows exactly which resources are responsible.

The cache problem. Browsers cache aggressively. A resource that appears to load instantly might be served from the disk cache, not the network. The Network panel distinguishes between cached and network requests, and the “Empty cache and hard refresh” option forces the browser to fetch everything from the server, showing what a first-time visitor actually experiences .


a. Opening and recording network activity

The Network panel is opened from the DevTools action bar. On Windows and Linux, press Ctrl+Shift+J to open DevTools, then click the Network tab. On macOS, press Command+Option+J . Alternatively, open the Command Menu with Ctrl+Shift+P (or Command+Shift+P on macOS), type “Network”, select “Show Network panel”, and press Enter .

The panel records nothing until it is open. If you open DevTools after a page has loaded, the Network panel is empty until you reload the page or trigger a new request. This is deliberate: recording everything the browser does would be overwhelming, so recording starts when you open the tool .

Once the panel is open, every request the page makes is logged automatically. Each row in the Requests table represents one resource. The default columns are Name (the resource URL), Status (the HTTP status code), Type (the resource type, such as document, stylesheet, script, or fetch), Initiator (what caused the request), Size (the transferred and decoded size), Time (the total duration), and Waterfall (a visual timeline) .

To record a full page load from scratch, reload the page. The first row is usually the main HTML document, and the subsequent rows are the resources that document references. To see what a first-time visitor experiences, right-click the reload button and select Empty cache and hard refresh. This forces the browser to bypass its cache and fetch every resource from the network .


b. Inspecting individual requests and reading the timing waterfall

Clicking any row in the Requests table opens a detail pane with several tabs. The Headers tab shows the request method, the URL, the status code, and both request and response headers . This is where you verify that the Content-Type is correct, that the Authorization header is present, or that the server returned the expected Cache-Control directive.

The Payload tab shows the query string parameters for GET requests and the form data or JSON body for POST requests . If an API call is failing because a parameter is missing or malformed, this is where you see it. The Response tab shows the raw response body, and the Preview tab shows a rendered version for HTML or a formatted view for JSON .

The Timing tab is the most important for performance analysis. It breaks the request into stages :

  • Queueing: The request is waiting because the browser has reached its connection limit for the domain, or because it is waiting for a higher-priority request.
  • DNS Lookup: The domain name is being resolved to an IP address.
  • Initial Connection: The TCP handshake is establishing the connection.
  • SSL: The TLS handshake is negotiating encryption (for HTTPS).
  • Request Sent: The request headers are being transmitted.
  • Waiting (TTFB): The time from sending the request to receiving the first byte of the response. This includes server processing time and network round-trip time.
  • Content Download: The time to receive the entire response body.

The Waterfall column visualizes these stages as colored bars. A long blue bar in the Waiting stage means the server is slow. A long green bar in Content Download means the response body is large or the network is slow. A long bar at the start in Queueing means the browser is holding the request because too many are in flight . The waterfall turns a single “slow” number into a diagnosis.


c. Throttling and copying requests

Throttling simulates slower network conditions. The Throttling dropdown in the toolbar offers presets: No throttling, Fast 4G, Slow 4G, Fast 3G, Slow 3G, and Offline . Selecting a preset applies it to all subsequent requests, and an icon appears on the Network tab to remind you that throttling is active.

For fine-grained control, the Request conditions drawer lets you throttle specific patterns rather than the entire page. You can, for example, throttle only requests to an image CDN while leaving API calls unthrottled . The drawer also supports blocking specific requests entirely, which is useful for testing how a page behaves when a third-party script fails to load .

Copying a request is how you reproduce a problem outside the browser. Right-click any request in the table and select Copy, then choose Copy as cURL or Copy as fetch . The cURL command includes the URL, method, headers, and body, and can be pasted directly into a terminal. This is the fastest way to hand a backend developer a reproducible request or to verify that an API works independently of the browser.


Complete Example Session

The following session demonstrates a typical debugging workflow: open the panel, record a load, inspect a slow API request, throttle the connection, and copy the request for reproduction.

// ============================================
// PART 1: OPEN THE NETWORK PANEL
// ============================================
// Open DevTools (Ctrl+Shift+J or Command+Option+J)
// Click the Network tab
// The panel is empty until activity is recorded

// ============================================
// PART 2: RECORD A PAGE LOAD
// ============================================
// Reload the page
// The Requests table fills with resources
// The first row is the HTML document
// Subsequent rows are CSS, JS, images, and API calls

// ============================================
// PART 3: IDENTIFY A SLOW REQUEST
// ============================================
// Sort by the Time column (click the header)
// The slowest request appears at the top
// Example: GET /api/products takes 2.4 seconds
// Click the row to open the detail pane

// ============================================
// PART 4: INSPECT THE HEADERS
// ============================================
// Headers tab shows:
//   Status: 200 OK
//   Content-Type: application/json
//   Content-Length: 2.3 MB
// The response body is large

// ============================================
// PART 5: READ THE TIMING BREAKDOWN
// ============================================
// Timing tab shows:
//   Queueing: 320 ms  (browser waited)
//   DNS Lookup: 0.03 ms  (cached)
//   Initial Connection: 12 ms
//   SSL: 28 ms
//   Request Sent: 0.2 ms
//   Waiting (TTFB): 82 ms  (server is fast)
//   Content Download: 740 ms  (large body)
// Total: ~1.2 seconds
// Diagnosis: the server responds quickly,
// but the response body is too large

// ============================================
// PART 6: THROTTLE TO SIMULATE A SLOW NETWORK
// ============================================
// Select "Slow 3G" from the Throttling dropdown
// Reload with "Empty cache and hard refresh"
// The page now takes much longer to load
// The waterfall shows which resources dominate

// ============================================
// PART 7: COPY THE REQUEST FOR REPRODUCTION
// ============================================
// Right-click the slow request
// Select Copy → Copy as cURL
// Paste into a terminal:
//   curl 'https://example.com/api/products' \
//     -H 'Accept: application/json'
// The response confirms the large body size

// ============================================
// PART 8: TEST WITH A SMALLER RESPONSE
// ============================================
// Modify the API call to request pagination:
//   GET /api/products?limit=20
// Reload and inspect the new request
// Content-Length drops from 2.3 MB to 120 KB
// Content Download drops from 740 ms to 40 ms

// ============================================
// PART 9: VERIFY THE FIX
// ============================================
// The total request time drops from 1.2 s to 0.3 s
// The page loads faster because the response is smaller
// The waterfall confirms the improvement

// ============================================
// PART 10: THE FULL PICTURE
// ============================================
// Network panel records every request
// Headers tab shows status and metadata
// Timing tab diagnoses the bottleneck
// Throttling simulates real-world conditions
// Copy as cURL reproduces the request

The ten parts trace a complete debugging workflow: opening the panel, recording a load, identifying a slow request, inspecting headers, reading the timing breakdown, throttling the connection, copying the request, testing a fix, verifying the improvement, and summarizing the workflow. What the session demonstrates is that the Network panel is not just a list of requests—it is a diagnostic tool that attributes delay to specific stages and provides the evidence needed to fix the problem.


Quick Reference

Opening the Network Panel

MethodShortcut
DevTools shortcutCtrl+Shift+J (Win/Linux), Command+Option+J (macOS)
Command MenuCtrl+Shift+P → “Network”
Tab locationAction bar at top of DevTools

Default Columns

ColumnMeaning
NameResource URL
StatusHTTP status code
TypeResource type (document, script, fetch)
InitiatorWhat caused the request
SizeTransferred and decoded size
TimeTotal duration
WaterfallVisual timeline

Timing Stages

StageMeaning
QueueingWaiting for connection slot
DNS LookupResolving domain name
Initial ConnectionTCP handshake
SSLTLS handshake
Request SentSending request headers
Waiting (TTFB)Server processing + first byte
Content DownloadReceiving response body

Throttling Presets

PresetSimulates
No throttlingFast local network
Fast 4GGood mobile connection
Slow 4GAverage mobile connection
Fast 3GOlder mobile connection
Slow 3GPoor mobile connection
OfflineNo connection

Copy Options

OptionOutput
Copy as cURLTerminal command
Copy as fetchJavaScript fetch call
Copy responseRaw response body
Copy all as HARFull network log

Best Practices

āœ… Do This:

// Open Network panel before reloading
// Use "Empty cache and hard refresh" for first-visit testing
// Read the Timing tab to attribute delay
// Throttle to simulate your users' network
// Copy as cURL to reproduce API problems

āŒ Don’t Do This:

// Open Network panel after the page loaded
// Assume instant load means fast (cache may be serving)
// Guess at performance problems without the waterfall
// Ignore Queueing delays from connection limits
// Debug on a fast connection only

Common Pitfalls

PitfallWhy It HappensFix
Panel is emptyOpened after page loadedReload the page
Resource appears instantServed from cacheEmpty cache and hard refresh
Slow request not the serverQueueing or download stage is slowRead the Timing tab
Throttling not appliedForgot to select presetSelect from Throttling dropdown
Cannot reproduce API callMissing headers in manual requestCopy as cURL instead

Real-World Examples

1. Debugging a 404

// Network panel shows status 404 for /api/user
// Headers tab confirms the URL is correct
// Response tab shows the server's error message

2. Finding a large image

// Sort by Size column
// 2 MB hero image at the top
// Content Download dominates the timing

3. Diagnosing queueing delay

// Timing tab shows Queueing: 320 ms
// Too many concurrent requests to same domain
// Fix: use HTTP/2 or reduce request count

4. Simulating slow mobile

// Select Slow 3G from Throttling
// Reload with empty cache
// Page load time increases from 0.5s to 4s

5. Copying an API call

// Right-click request → Copy → Copy as cURL
// Paste into terminal to verify outside browser

6. Verifying a cache header

// Headers tab shows Cache-Control: max-age=3600
// Response should be cached for one hour

7. Checking a redirect chain

// Status column shows 301 → 200
// Initiator column shows the redirect source

8. Testing offline behavior

// Select Offline from Throttling
// Reload to see if the page works without network

9. Finding the slowest resource

// Click Time column header to sort
// The slowest request appears at the top

10. Exporting a HAR file

// Right-click any request → Copy all as HAR
// Share the file for remote debugging

Visual

The Network Panel Layout

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│  TOOLBAR (filter, throttle, search)          │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│  OVERVIEW GRAPH (traffic over time)          │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│  REQUESTS TABLE                              │
│  ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │
│  │ Name │Status│ Type │ Time │ Waterfall   │ │
│  ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤ │
│  │ /    │ 200  │ doc  │ 120ms│ ā–ˆā–ˆā–ˆ         │ │
│  │ app  │ 200  │ js   │ 340ms│   ā–ˆā–ˆā–ˆā–ˆā–ˆ     │ │
│  │ api  │ 200  │ fetch│ 1.2s │      ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā”‚ │
│  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │
ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤
│  DETAIL TABS (Headers, Payload, Timing, ...) │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Timing Waterfall Stages

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│  Queueing        ā–ˆā–ˆā–ˆ                         │
│  DNS Lookup      ā–ˆ                           │
│  Initial Conn.   ā–ˆā–ˆ                          │
│  SSL             ā–ˆā–ˆā–ˆā–ˆ                        │
│  Request Sent    ā–ˆ                           │
│  Waiting (TTFB)  ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ                      │
│  Content Download ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆ         │
│                                              │
│  Long download → response body is large      │
│  Long TTFB → server is slow                 │
│  Long queue → too many concurrent requests   │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Throttling Presets

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│  No throttling  → local network speed        │
│  Fast 4G        → good mobile                │
│  Slow 4G        → average mobile             │
│  Fast 3G        → older mobile               │
│  Slow 3G        → poor mobile                │
│  Offline        → no network                 │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Copy as cURL

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│  Right-click request → Copy → Copy as cURL   │
│         │                                    │
│         ā–¼                                    │
│  curl 'https://api.example.com/users' \      │
│    -H 'Authorization: Bearer token' \        │
│    -H 'Content-Type: application/json'       │
│         │                                    │
│         ā–¼                                    │
│  Paste in terminal → reproduce request       │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

Summary

ItemValue
Panel purposeRecord and inspect network requests
Open shortcutCtrl+Shift+J then Network tab
RecordingAutomatic while DevTools is open
First-visit testEmpty cache and hard refresh
Timing stagesQueueing → DNS → Connect → SSL → TTFB → Download
WaterfallVisual timeline of stages
ThrottlingSimulate 3G/4G/offline
Copy as cURLReproduce request in terminal

Key takeaways:

  • The Network panel records every request the page makes. It shows the status code, headers, response body, and timing for each resource .
  • The Timing tab attributes delay to specific stages. Queueing, TTFB, and Content Download each point to a different cause .
  • The waterfall makes bottlenecks visible. Colored bars show where time is spent without reading numbers .
  • Throttling simulates real-world networks. Fast local connections hide problems that slow mobile connections reveal .
  • Empty cache and hard refresh shows first-visit behavior. Without it, cached resources make the page appear faster than it is .
  • Copy as cURL reproduces the exact request. It includes headers and body, making it the fastest way to share or debug an API call .
  • The panel is for diagnosis, not just inspection. The evidence it provides—timing stages, status codes, sizes—turns a vague “it’s slow” into a specific fix.

Remember: The Network panel is the window into the conversation between your browser and the server. Open it before the page loads, reload with an empty cache, and read the waterfall. The longest bar tells you which stage is slow. The status column tells you which request failed. The headers tell you why. Throttle the connection to see what your users see. Copy the request as cURL to reproduce it outside the browser. The panel does not just show you what happened—it shows you why, and that is the difference between guessing and fixing.


Was this helpful?


Stop using slow, ad-bloated tool sites! 🤮

šŸ”Ž Search “KandZ Tools” on Google to use many professional utilities for free.

KandZ.me is the ultimate minimalist hub for:
āœ… Finance (Mortgage, Interest, Inflation)
āœ… Tech (Base64, JSON, Dev Suite, IP)
āœ… Health (BMI, BMR, TDEE)
āœ… Productivity (Timer, Workspace, QR)

āš”ļø Fast & Private
šŸ”’ No data leaves your device
šŸ’Ž 100% Free

šŸ”— Use it now: https://tools.kandz.me
šŸ”– Bookmark it—you’ll need it later!