Skip to main content
Fiddler HTTP/2 & HTTP/3 Capture: A Developer’s Guide
HTTP/HTTPS Capture7 min read

Fiddler HTTP/2 & HTTP/3 Capture: A Developer’s Guide

Learn how to capture, inspect, and troubleshoot HTTP/2 and HTTP/3 traffic in Fiddler — with HTTPS decryption, net-log imports, and real-world debugging tips.

Share:

Modern web applications increasingly rely on HTTP/2 and HTTP/3 for speed, multiplexing, and resilience — but traditional HTTP debugging tools often fall short. Fiddler, the veteran HTTP debugging proxy trusted by developers and QA engineers for over two decades, now supports full visibility into both protocols — provided you configure it correctly. Without proper setup, you’ll see encrypted TLS 1.3 handshakes or blank sessions where HTTP/2 streams should appear. This guide walks you through capturing, inspecting, and troubleshooting HTTP/2 and HTTP/3 traffic in Fiddler — with real-world configuration steps, known limitations, and actionable workarounds.

Why HTTP/2 and HTTP/3 Capture Matters

HTTP/2 (RFC 7540) introduced header compression, binary framing, and stream multiplexing — all of which break naive HTTP parsing. HTTP/3 (RFC 9114) goes further: it replaces TCP with QUIC over UDP, encrypts all headers by default, and eliminates head-of-line blocking at the transport layer. These improvements are great for users — but they complicate debugging. If your API tests fail silently, your frontend loads inconsistently, or your CDN reports unexpected connection resets, seeing the actual frames, priorities, and push promises is essential. That’s where a capable fiddler proxy becomes indispensable.

Fiddler Classic (v5.0.20234.58900+) and Fiddler Everywhere (v1.22.0+) support HTTP/2 capture out of the box when TLS interception is enabled. HTTP/3 capture, however, requires additional considerations — especially since Fiddler doesn’t terminate QUIC itself. Instead, it relies on browser-level logging and fallback mechanisms to reconstruct session data. Understanding this distinction is critical for accurate fiddler debugging.

Prerequisites: Before You Capture Anything

Install and Trust the Fiddler Root Certificate

HTTPS decryption is foundational. Without it, Fiddler sees only encrypted TLS records — no HTTP/2 frames, no HTTP/3 metadata. Launch Fiddler → Tools > Options > HTTPS → check Decrypt HTTPS traffic. Click Actions > Trust Root Certificate and follow the OS prompts (Windows requires Admin; macOS needs Keychain access). Restart Fiddler after installation.

💡 Pro Tip: If certificate trust fails, manually import FiddlerRoot.cer (found in %USERPROFILE%\Documents\Fiddler2\Certificates) into your system’s Trusted Root store. Verify with certmgr.msc on Windows or Keychain Access on macOS.

Enable HTTP/2 Support in Fiddler

Fiddler Classic enables HTTP/2 automatically when HTTPS decryption is active and the client negotiates ALPN h2. No extra toggle exists — but confirm it’s working: open Tools > Options > Connections, ensure Enable IPv6 is checked (some HTTP/2 servers require it), and verify Allow remote computers to connect is disabled unless needed (remote capture introduces latency and breaks ALPN negotiation).

For Fiddler Everywhere: Go to Settings > Proxy > HTTPS Decryption, enable Decrypt HTTPS traffic, then restart the app. HTTP/2 will appear automatically in the Web Sessions list with protocol column showing HTTP/2.

Capturing HTTP/2 Traffic: Step-by-Step

1. Configure Your Browser or Client

Most modern browsers (Chrome, Edge, Firefox ≥110) speak HTTP/2 by default over HTTPS. To force HTTP/2 and rule out fallbacks:

  • Chrome/Edge: Launch with --unsafely-treat-insecure-origin-as-secure="https://example.com" --user-data-dir=/tmp/fiddler-test --unsafely-allow-http-loosening (for local dev servers)
  • Firefox: Visit about:config, set network.http.http2.enabled = true and network.http.spdy.enabled = false (to avoid SPDY confusion)

✅ Verification: In Fiddler’s Web Sessions list, look for the Protocol column. Right-click the column header → Customize Columns → ensure Protocol is visible. HTTP/2 sessions display as HTTP/2, not HTTP/1.1.

2. Inspect HTTP/2 Frames and Stream Details

Double-click any HTTP/2 session → switch to the Inspectors tab → select TextView or WebForms. For deeper analysis:

  • Click Raw → scroll past the initial TLS handshake to see the HTTP/2 preamble (0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a) and subsequent HEADERS/CONTINUATION/DATA frames.
  • Use TextView > HTTP/2 Frames (Fiddler Classic v5.0.20234.58900+) to decode individual frames: headers appear decoded with pseudo-headers (:method, :path, :status) highlighted.
  • Check Statistics > HTTP/2 Stream Info: reveals stream ID, weight, dependency tree, and whether server push occurred.

⚠️ Troubleshooting: If you see HTTP/1.1 despite expecting HTTP/2, check the server’s ALPN support using openssl s_client -alpn h2 -connect example.com:443. Also verify your target site isn’t using HTTP/2 over cleartext (h2c) — Fiddler does not support h2c proxying.

Capturing HTTP/3 Traffic: What’s Possible (and What’s Not)

Fiddler does not act as a QUIC endpoint. It cannot terminate or decrypt raw UDP/QUIC packets. So how do we capture HTTP/3?

The answer lies in browser-integrated logging. Chrome and Edge expose QUIC traces via their built-in net-log, which Fiddler can import and correlate with existing HTTPS sessions.

1. Generate a Chrome Net-Log with QUIC Enabled

Launch Chrome with:

chrome.exe --log-net-log=c:\temp\quic.log --net-log-capture-mode=IncludeSensitive --enable-quic --quic-version=h3-32

Visit your target site (e.g., https://cloudflare.com, https://google.com). Close Chrome.

2. Import and Correlate in Fiddler Classic

In Fiddler Classic: File > Import Sessions > From NetLog File → select quic.log. Fiddler parses QUIC connection IDs, stream IDs, packet loss, and frame types (e.g., HEADERS, SETTINGS, PUSH_PROMISE).

You’ll see two parallel entries:

  • One standard HTTPS session (HTTP/2 or HTTP/1.1) — representing the decrypted application layer.
  • One labeled QUIC — showing transport-layer events, including version negotiation, crypto handshake timing, and stream creation.

🔍 Pro Insight: Use Filters > Show Only > QUIC to isolate transport events. Cross-reference stream IDs between the QUIC log and the decrypted HTTP session to map stream_id=5 to GET /api/data.

3. Limitations and Workarounds

  • ❌ No end-to-end HTTP/3 decryption: Fiddler cannot decrypt QUIC’s 0-RTT or 1-RTT protected payloads without the server’s private key.
  • ❌ No real-time streaming: Net-log is post-hoc. You cannot pause/resume HTTP/3 capture mid-session like HTTP/2.
  • ✅ Partial workaround: Use chrome://net-internals#quic while browsing — export logs live, then reimport into Fiddler. Combine with more tutorials on correlating timestamps across logs.

Advanced Debugging: Prioritization, Server Push, and RST_STREAM

HTTP/2 introduces nuanced behaviors that impact performance — and Fiddler helps surface them.

Analyzing Stream Priority and Weight

In Inspectors > Statistics > HTTP/2 Stream Info, examine the Weight and Dependency columns. A weight of 16 means higher priority than default (16 is max; 1 is min). Dependency indicates hierarchical ordering — e.g., stream_id=3 depends on stream_id=1, meaning the browser expects 1 before processing 3.

If assets load out of order despite correct weights, check for:

  • Server misconfiguration (e.g., nginx missing http2_push_preload on;)
  • Client-side resource hints (<link rel="preload">) overriding HTTP/2 priorities

Detecting and Diagnosing RST_STREAM

An RST_STREAM frame signals abrupt stream termination — often due to client cancellation, timeout, or server policy. In Fiddler’s Raw view, search for 0x03 (the RST_STREAM type byte) followed by an error code (e.g., 0x08 = CANCEL).

To reproduce: Start a large file download in Chrome → right-click → Save link as → cancel mid-transfer. In Fiddler, filter for RST_STREAM and compare timestamp against the DATA frame count. Frequent RSTs may indicate aggressive client timeouts or misconfigured CDN retry logic.

Troubleshooting Common Capture Failures

Symptom Likely Cause Fix
All sessions show HTTP/1.1 even on known HTTP/2 sites TLS ALPN negotiation failed Ensure Fiddler’s root cert is trusted system-wide, not just in browser. Disable antivirus TLS scanning.
Blank or incomplete HTTP/2 frames in Raw view Missing HTTP/2 frame decoder Update Fiddler Classic to latest stable. Confirm Fiddler.HTTP2 extension is loaded (Rules > Customize Rules > OnBeforeRequest — check for oSession.oRequest.headers.HTTPVersion = "2.0").
QUIC log imports but shows no stream data Log captured without --enable-quic or incorrect --quic-version Use --quic-version=h3-32 for Chrome 119+, or h3-33 for newer builds. Avoid --quic-version=latest.
Fiddler hangs or crashes during HTTP/2 capture High-volume multiplexed traffic overwhelming UI Disable Show TextView in Real-Time (Tools > Options > General) and use Filters > Show Only > HTTP/2 to reduce noise.

Conclusion: Mastering Modern Protocol Visibility

Capturing HTTP/2 and HTTP/3 traffic in Fiddler isn’t magic — it’s configuration, correlation, and context. With HTTPS decryption properly enabled, HTTP/2 appears natively and richly inspectable: from frame-level decoding to priority trees and push diagnostics. HTTP/3 demands a hybrid approach — leveraging browser net-logs and manual correlation — but delivers invaluable insight into QUIC handshake latency, packet loss, and stream lifecycle.

Remember: Fiddler’s strength lies not in replacing network analyzers like Wireshark, but in bridging the gap between raw bytes and application intent. When your React app stalls on /api/users, and Chrome DevTools shows “finished” but no response body, Fiddler’s HTTP/2 Stream Info tab might reveal a silent RST_STREAM — or your CDN quietly downgrading to HTTP/1.1 due to misconfigured cipher suites.

For more advanced scenarios — like debugging gRPC-Web over HTTP/2, mocking HTTP/3-compatible APIs, or integrating Fiddler with CI pipelines — explore our browse HTTP/HTTPS Capture tutorials. And if you hit a protocol edge case not covered here, contact us — we’ll help you trace it down, frame by frame.

Share:

Related Topics

fiddler tutorialfiddler debugginghttp debuggingfiddler proxyhttps decryption

Get Fiddler Tips & Tutorials

Stay updated with the latest Fiddler tutorials, HTTP debugging guides, request modification tips, and web traffic analysis techniques.

Free forever. New tutorials published daily.

Related Articles