This is an old revision of the document!
Table of Contents
Provenance: programming:traffic_files
Working notes behind traffic_files — every query with its population and denominator, the scripts and their unedited output, the folds and their residue, the hand classification and its deciding sentences, the figures checked against the source papers, the external sources and how each was verified, and what could not be established. Corpus-level caveats that apply to every page on this site are on corpus and are not restated here.
1. What this page is backing
| Item | Value |
|---|---|
| Content page | traffic_files |
| Report script | scripts/report_traffic_files.mjs |
| Folds it depends on | scripts/traffic_fold.mjs — a capture-instrument regex fold and a HAR verdict hand classification |
| Per-paper figure verification | scripts/verify_traffic_figures.mjs |
| External-fact re-check | scripts/external_checks_traffic_files.sh |
| Runnable experiments | sandbox/fixture_traffic.mjs, sandbox/har_vs_cdp.mjs, sandbox/mitm_vs_browser.mjs, sandbox/har_vs_cdp_core.mjs |
| Stale-number guard | scripts/check_page_numbers.mjs |
| Data | data/extract/run1/extractions.jsonl — 5,859 papers, 7 venues, 2010–2026 |
| Written | 2026-08-14, against the corpus as extended on 2026-08-11 (commit 8a6b843) |
This page is new, not an extension. start has promised Programming:Traffic files (“using traffic files, e.g., HAR”) since before this corpus existed, and ip_classification links to it twice — once for serverIPAddress and once for “extracting server addresses from a HAR or a packet capture”, both marked not yet written. Nothing on the wiki overlapped: crawler covers what drives the browser and stops at the control channel; archives covers reading somebody else's recording (WARC, the Wayback Machine) and explicitly not making your own; requests starts after you already have the requests. The gap this page fills is the artefact in between.
Judgement call on scope. The item as specified asked for “the HAR schema, what it loses versus a full CDP trace, mitmproxy/mitmdump, and browser-native export”. We widened it to include packet capture, because the corpus makes that unavoidable: tcpdump and Wireshark are the two most-named capture instruments in it (119 and 128 papers) and a page that omitted them would misrepresent what the literature does. We did not widen it to replay and archiving beyond one section, because archives already covers that well and duplicating it would have been worse than cross-linking.
2. Populations and denominators
Three separate populations, because no single field in the extraction means “wrote a traffic file”.
| Tag | Definition | N |
|---|---|---|
| CAP | ≥1 tools[] tuple with category ∈ {traffic-capture, proxy-interception} and usedOrMentioned ∈ {used, produced} | 679 |
| CAP ∩ traffic-capture | 509 | |
| CAP ∩ proxy-interception | 206 | |
| both | 36 | |
| ON | CAP ∧ the tool name folds to a non-offtopic family in CAPTURE_FAMILIES | 514 |
| OFF-only | CAP ∧ every folded family is offtopic — excluded from the page | 162 |
| ON ∧ web | platforms includes web — the denominator for the layer flip | 188 |
| HAR-SWEEP | paper.cols.txt matches the HAR regex printed in §5 (DokuWiki tables cannot hold a literal pipe, so it is not repeated here) | 95 |
HAR-SWEEP ∧ verdict instrument | the page's HAR population | 32 |
| CRAWL | crawlConfig !== null OR studyTypes contains automated-web-crawl | 1,120 |
usedOrMentioned is filtered to used/produced everywhere. Including compared and mentioned would count a paper that named Wireshark as related work as a paper that captured packets.
2.1 Why CAP is not the population
traffic-capture on a seven-venue security corpus is not a web-measurement category. Of 679 papers, 162 name only instruments that produce no web traffic file at all. Those are folded into seven explicitly named offtopic: families and excluded with a printed count:
| Excluded family | Papers | Examples of the names in it |
|---|---|---|
| radio / SDR / RF sniffer | 90 | USRP, HackRF, bladeRF, LimeSDR, Ubertooth, Proxmark, Kismet, nexmon, gr-gsm, TI CC2531 |
| hardware probe / lab instrument | 30 | oscilloscopes, spectrum analysers, ChipWhisperer, Monsoon power monitor, OBS Studio, arecord |
| host / side-channel instrumentation | 30 | Mastik, Flush+Reload, Prime+Probe, Intel Pin, strace, perf, Process Monitor, netstat |
| commercial VPN / residential proxy (a vantage point, not an instrument) | 27 | Luminati, Bright Data, ProxyRack, NordVPN, Mullvad, Hola, Hide My Ass, Proxychains, Tor |
| traffic generation / replay load | 17 | tcpreplay, iperf3, TGen, DPDK Pktgen, Harpoon, Resperf |
| passive dataset / telescope / vantage platform | 17 | UCSD Network Telescope, MAWI, LANDER, BGPStream, RIPE Atlas |
| proxies something other than web traffic | 5 | ProxySQL (a database proxy), HA-Proxy, dnscrypt-proxy, doh-proxy, netcat |
A paper can match several families, so the rows sum to more than the union (210 papers match at least one off-topic family; 162 match only off-topic families).
The VPN row is the one a reasonable person could disagree with. A commercial VPN in a proxy-interception tuple is a vantage point, which is crawling_location's subject, not an instrument that writes a file. We excluded it. The residential-proxy question is genuinely two questions and this page answers only one of them.
This row was wrong in the first published version and was fixed on review. It also swallowed Squid, Squid ICAP modules, Privoxy, Tinyproxy, 3proxy and wwwoffle — self-hosted forward and caching proxies, which sit exactly where an intercepting proxy sits and can log the same traffic (Squid with SSL-bump, Privoxy's filters). They are neither commercial VPNs nor vantage points, and excluding them as such was indefensible. They are now their own on-topic family, forward / caching proxy (self-hosted), 7 papers. ProxySQL (a database proxy), HA-Proxy, dnscrypt-proxy, doh-proxy and netcat were in the same row for the same bad reason and are now in a separate off-topic family named for what they actually are. The reviewer's point stands generally: an off-topic family's name is a claim about everything in it, and it has to be true of every member, not of the ones you had in mind when you wrote the regex.
3. Running it
cd /workspace/artifacts/wiki # every figure on the page, with its denominator node scripts/report_traffic_files.mjs > out/traffic_files-output.txt node scripts/report_traffic_files.mjs --list > out/traffic_files-list.txt node scripts/report_traffic_files.mjs --wiki # DokuWiki tables node scripts/report_traffic_files.mjs --quotes 'mitm' # evidence behind a family # every literal per-paper figure and quote, checked against paper.cols.txt node scripts/verify_traffic_figures.mjs > out/traffic_files_figures.txt # every external fact, re-checked against its primary source (needs network) sh scripts/external_checks_traffic_files.sh > out/traffic_files_external.txt 2>&1 # the two experiments (needs Playwright's headless_shell and mitmproxy) export PLAYWRIGHT_BROWSERS_PATH=/workspace/.playwright export PW_EXEC=$(ls -d /workspace/.playwright/chromium_headless_shell-*/chrome-linux/headless_shell | head -1) cd sandbox && node fixture_traffic.mjs & # http://127.0.0.1:8098/ node sandbox/har_vs_cdp.mjs > out/har_vs_cdp-output.txt node sandbox/har_vs_cdp_core.mjs > out/har_vs_cdp_core-output.txt MITMDUMP=/tmp/mitmlib/bin/mitmdump MITMLIB=/tmp/mitmlib \ node sandbox/mitm_vs_browser.mjs > out/mitm_vs_browser-output.txt MITMDUMP=/tmp/mitmlib/bin/mitmdump MITMLIB=/tmp/mitmlib \ node sandbox/mitm_vs_browser.mjs https://example.com/ > out/mitm_vs_browser-remote-output.txt # stale-number guard, whole page, including <file> blocks cat out/traffic_files-output.txt out/traffic_files-list.txt out/traffic_files_figures.txt \ out/har_vs_cdp-output.txt out/mitm_vs_browser-output.txt \ out/mitm_vs_browser-remote-output.txt out/traffic_files_external.txt \ > out/traffic_files_all_evidence.txt node scripts/check_page_numbers.mjs pages/programming_traffic_files.txt \ out/traffic_files_all_evidence.txt --code
The guard reports OK — every figure in the page traces to out/traffic_files_all_evidence.txt as of 2026-08-14. It took three passes to get there, and each one found something — see §9.
4. The capture-instrument fold
CAPTURE_FAMILIES in scripts/traffic_fold.mjs is an ordered list of regex families; first match wins, so offtopic families are listed first and specific names come before the generic patterns that would also swallow them (“tcpdump with PF_RING” must be packet capture, not high-rate hardware; “Tor SOCKS proxy server” must be a vantage point, not a TLS interceptor).
| Family | Layer | Papers | Distinct spellings |
|---|---|---|---|
| offtopic: radio / SDR / RF sniffer | offtopic | 90 | 105 |
| offtopic: hardware probe / lab instrument | offtopic | 30 | 34 |
| offtopic: host / side-channel instrumentation | offtopic | 30 | 29 |
| offtopic: commercial VPN / residential proxy | offtopic | 27 | 28 |
| offtopic: traffic generation / replay load | offtopic | 17 | 12 |
| offtopic: passive dataset / telescope | offtopic | 17 | 16 |
| offtopic: proxies something other than web traffic | offtopic | 5 | 5 |
| packet capture (libpcap family) | packet | 287 | 72 |
| TLS-intercepting proxy | proxy | 189 | 79 |
| IDS / stream analyser | packet | 28 | 10 |
| on-device mobile / IoT capture | mobile | 21 | 15 |
| high-rate capture (kernel / NIC offload) | packet | 15 | 9 |
| flow-level export (NetFlow / IPFIX) | flow | 13 | 11 |
| record-and-replay / web archive | browser | 9 | 9 |
| browser-native HTTP log (HAR / NetLog) | browser | 8 | 8 |
| forward / caching proxy (self-hosted) | proxy | 7 | 6 |
Unmapped residue: 9 distinct names across 9 papers, printed in full by the report and reproduced here so it does not live only in a local file:
Google Translate (1); browser add-on we designed (1); custom program (1); lb (1); Facebook tracking pixel (1); SSL measurements (1); custom addon script (1); custom tracing plugin (1); iPhone 16 (1)
All nine were read by hand. Six are extraction noise in a capture category (“Google Translate”, “Facebook tracking pixel”, “iPhone 16”, “lb”, “custom program”, “SSL measurements”). Three are genuinely unidentifiable instruments — “browser add-on we designed”, “custom addon script”, “custom tracing plugin” — where the paper names no tool at all. Leaving them unmapped is the honest outcome: they belong to no family because the paper does not say which.
Spelling variance, which is why the fold exists at all. tcpdump appears as tcpdump, Tcpdump, TCPdump, TCPDump, TCPDUMP, TCP-Dump, tcpdump/libpcap and tcpdump with PF_RING; Wireshark as Wireshark, WireShark, Wireshark GUI, WireShark/tshark, custom Wireshark dissectors and Wireshark plugin; mitmproxy as mitmproxy, Mitmproxy, MitmProxy, MITMProxy, mitm-proxy, mitmproxy.io, Customized Mitm Proxy and mitmdump.
5. The HAR sweep and its hand classification
The tool schema sees HAR in 10 papers. That is not a measurement of the field; it is a measurement of what people bother to call a tool. So the HAR population comes from a full-text sweep of every data/fulltext/<year>/<venue>/<slug>/paper.cols.txt (5,855 of the 5,859 records have one), matching
/\bHAR\b|HTTP Archive|HTTP archive|\.har\b|HttpArchive|httparchive/
95 papers match. HAR_VERDICT in scripts/traffic_fold.mjs carries one verdict and one deciding sentence per paper; the report fails loudly if the sweep returns a paper the map does not cover, or if the map covers a paper the sweep no longer returns.
| Verdict | Meaning | Papers |
|---|---|---|
citation | httparchive.org or the Web Almanac cited for a background statistic | 36 |
instrument | the paper writes and/or reads HAR files as its own data | 32 |
dataset | the paper analyses the httparchive.org crawl corpus | 14 |
homograph | “HAR” means something else entirely | 11 |
mention | HAR discussed but not used | 2 |
5.1 The homographs, in full
This is the part that cannot be automated, and the reason the verdicts are hand-made.
| Paper | What “HAR” means there |
|---|---|
NDSS 2025 radsee-… | “human activity recognition (HAR) using different sensing” |
NDSS 2024 campro-… | “Vision-based human activity recognition (HAR)” |
NDSS 2026 svdefense-… | “Human Activity Recognition (HAR). HAR identifies daily activities like walking or sitting” |
NDSS 2026 beyond-conventional-triggers-… | “the Human Activity Recognition Dataset (KU-HAR)” |
PETS 2026 sensor-privacy-as-a-spectrum-… | “three widely-used benchmarks: UCI-HAR … UTAH-STM-HAR” |
CCS 2019 privacy-risks-of-securing-machine-learning-models-… | “the UCI Human Activity Recognition (HAR) dataset” |
CCS 2025 harnessing-vital-sign-vibration-harmonics-… | “we derive the Harmonic Amplitude Ratio (HAR)” |
USENIX 2023 sqirl-… | a surname split across a column break: “S HAR , L. K.” |
USENIX 2019 stack-overflow-considered-helpful-… | “B HAR - GAVA” |
USENIX 2018 schrodinger-s-rat-… | “D HAR - MDASANI” |
CCS 2023 large-language-models-for-code-security-… | an identifier split across a column break: “IS_WORD_C HAR” |
Four of the eleven are artefacts of the corpus's own two-column repair, not of the papers. That is worth knowing generally: a full-text regex over this corpus will match text that does not exist as a token in the PDF.
5.2 The two "mention" verdicts
Both were candidates for instrument and were rejected on reading:
- IMC 2011
towards-understanding-modern-web-traffic— “While their use of HTTP archive record (HAR) format [25] allows a precise detection of page load events, their data set consists of only the top-level pages of randomly chosen 2,000 Web sites”. That is a comparison to related work; this paper captures packets. - PETS 2022
fp-radar-…— “HTTP Archive [38] is a related project that archives millions of URLs each month. However, it does not store …”. Considered and rejected in favour of the Wayback Machine.
5.3 The 32 instrument papers
| Venue | Year | Slug |
|---|---|---|
| IMC | 2011 | understanding-website-complexity-measurements-metrics-and-implications |
| NDSS | 2015 | parking-sensors-analyzing-and-detecting-parked-domains |
| IMC | 2017 | the-ad-wars-retrospective-measurement-and-analysis-of-anti-adblock-filter-lists |
| USENIX | 2017 | characterizing-the-nature-and-dynamics-of-tor-exit-blocking |
| IEEE-SP | 2018 | surveylance-automatically-detecting-online-survey-scams |
| WWW | 2018 | proxytorrent-untangling-the-free-http-s-proxy-ecosystem |
| IMC | 2019 | an-empirical-study-of-the-cost-of-dns-over-https |
| PETS | 2019 | 4-years-of-eu-cookie-law-results-and-lessons-learned |
| PETS | 2019 | oblivious-dns-practical-privacy-for-dns-queries |
| WWW | 2020 | comparing-the-effects-of-dns-dot-and-doh-on-web-performance |
| WWW | 2020 | jscleaner-de-cluttering-mobile-webpages-through-javascript-cleanup |
| WWW | 2020 | understanding-the-performance-costs-and-benefits-of-privacy-focused-browser-exte |
| IEEE-SP | 2021 | crawlphish-large-scale-analysis-of-client-side-cloaking-techniques-in-phishing |
| PETS | 2021 | oblivious-dns-over-https-odoh-a-practical-privacy-enhancement-to-dns |
| WWW | 2021 | its-not-just-the-site-its-the-contents-intra-domain-fingerprinting-social-media |
| WWW | 2021 | where-are-you-taking-me-understanding-abusive-traffic-distribution-systems |
| IMC | 2022 | respect-the-origin-a-best-case-evaluation-of-connection-coalescing-in-the-wild |
| PETS | 2022 | are-iphones-really-better-for-privacy-a-comparative-study-of-ios-and-android-app |
| IMC | 2023 | the-prevalence-of-single-sign-on-on-the-web-towards-the-next-generation-of-web-c |
| PETS | 2023 | evaluating-practical-quic-website-fingerprinting-defenses-for-the-masses |
| USENIX | 2023 | reversing-breaking-and-fixing-the-french-legislative-election-e-voting-protocol |
| IMC | 2024 | diffaudit-auditing-privacy-practices-of-online-services-for-children-and-adolesc |
| IMC | 2024 | of-choices-and-control-a-comparative-analysis-of-government-hosting |
| IMC | 2024 | replication-taking-a-long-look-at-quic |
| WWW | 2024 | quic-is-not-quick-enough-over-fast-internet |
| IEEE-SP | 2025 | only-as-strong-as-the-weakest-link-on-the-security-of-brokered-single-sign-on-on |
| IMC | 2025 | where-in-the-world-are-my-trackers-mapping-web-tracking-flow-across-diverse-geog |
| PETS | 2025 | gig-work-at-what-cost-exploring-privacy-risks-of-gig-work-platform-participation |
| PETS | 2025 | tracker-installations-are-not-created-equal-understanding-tracker-configuration |
| USENIX | 2025 | web-execution-bundles-reproducible-accurate-and-archivable-web-measurements |
| IEEE-SP | 2026 | setting-the-course-but-forgetting-to-steer-analyzing-compliance-with-gdprs-right |
| PETS | 2026 | more-space-less-privacy-measuring-the-effectiveness-of-ip-based-website-fingerpr |
The deciding sentence for every one is in HAR_VERDICT and printed by report_traffic_files.mjs §E.
5.4 The writer probe is an upper bound, and the page says so
“Does the paper say which writer produced the HAR” cannot be answered from the schema, so it is a keyword probe over the full text of the 32 instrument papers. It finds a recognisable writer in 25 (78.1%). It over-counts: a paper that cites Selenium anywhere scores a hit for “Selenium / WebDriver” (13 of the 25) whether or not Selenium wrote the HAR — and Selenium cannot write one. The probe is published because the negative side is sound: the 7 papers it finds nothing in genuinely name no writer.
6. Unedited report output
The full output of node scripts/report_traffic_files.mjs is below, unedited. –list output (the 514-paper population with its families) is not reproduced here for length; regenerate it with the command in §3.
- report_traffic_files.txt
corpus: 5859 papers, 7 venues, 2010–2026 data root: /workspace/publications_dataset/data ==== A. POPULATION ==== Any tool tuple in category traffic-capture, used or produced 509 Any tool tuple in category proxy-interception, used or produced 206 Union (the raw capture-tooling population) 679 Overlap 36 Of the union, platforms includes "web" 217 Of the union, ran an automated web crawl 178 Distinct tool names across both categories (used/produced): 457 ── Capture-instrument families (of 679 papers naming any capture or proxy tool) ── Family Layer Papers Share Spellings -------------------------------------------------------------- -------- ------ ----- --------- offtopic: radio / SDR / RF sniffer offtopic 90 13.3% 105 offtopic: hardware probe / lab instrument offtopic 30 4.4% 34 offtopic: host / side-channel instrumentation offtopic 30 4.4% 29 offtopic: traffic generation / replay load offtopic 17 2.5% 12 offtopic: commercial VPN / residential proxy (a vantage point) offtopic 27 4.0% 28 offtopic: proxies something other than web traffic offtopic 5 0.7% 5 offtopic: passive dataset / telescope / vantage platform offtopic 17 2.5% 16 browser-native HTTP log (HAR / NetLog) browser 8 1.2% 8 record-and-replay / web archive browser 9 1.3% 9 forward / caching proxy (self-hosted) proxy 7 1.0% 6 TLS-intercepting proxy proxy 189 27.8% 79 packet capture (libpcap family) packet 287 42.3% 72 flow-level export (NetFlow / IPFIX) flow 13 1.9% 11 IDS / stream analyser packet 28 4.1% 10 high-rate capture (kernel / NIC offload) packet 15 2.2% 9 on-device mobile / IoT capture mobile 21 3.1% 15 On-topic families, union of papers 514 Off-topic families, union of papers 210 Off-topic ONLY (excluded from the page) 162 (sum of family counts != union: a paper may match several families) Unmapped residue: 9 distinct names, 9 papers Google Translate (1); browser add-on we designed (1); custom program (1); lb (1); Facebook tracking pixel (1); SSL measurements (1); custom addon script (1); custom tracing plugin (1); iPhone 16 (1) ── Capture layer (of 514 papers naming an on-topic capture instrument) ── Layer Papers Share ------- ------ ----- packet 318 61.9% proxy 194 37.7% mobile 21 4.1% browser 17 3.3% flow 13 2.5% ── Capture layer, web subset only (of 188 on-topic papers whose platform includes web) ── Layer Papers Share of web subset ------- ------ ------------------- proxy 95 50.5% packet 86 45.7% browser 13 6.9% mobile 5 2.7% flow 4 2.1% ── Named instruments in the on-topic families (papers; of 679) ── Instrument Papers Share ----------------------------------------------------------- ------ ----- Wireshark / tshark / dumpcap 128 18.9% tcpdump 119 17.5% mitmproxy / mitmdump 98 14.4% Bro / Zeek 24 3.5% Scapy 18 2.7% Burp Suite 18 2.7% Fiddler 15 2.2% PF_RING 12 1.8% HAR (browser HTTP log) 10 1.5% record-and-replay (WPR / pywb / Mahimahi) 8 1.2% Charles Proxy 5 0.7% proxy libraries in the crawler (selenium-wire / BrowserMob) 4 0.6% NetLog (Chrome) 3 0.4% OWASP ZAP 2 0.3% ==== B. IS THE INSTRUMENT IDENTIFIED? ==== ── Version reporting ── Tuples in on-topic capture families: 669; state a version: 85 (12.7%) Tool Papers Tuples Tuples with a version Share ---------------- ------ ------ --------------------- ----- Wireshark/tshark 121 130 16 12.3% tcpdump 119 119 4 3.4% mitmproxy 98 101 25 24.8% ==== C. DRIFT OVER TIME ==== ── Capture layer over time, share of the papers in each bucket that name an on-topic instrument ── Bucket Papers On-topic Share packet proxy browser flow mobile ---------- ------ -------- ----- ------ ----- ------- ---- ------ 2010–2013 511 54 10.6% 37 16 3 2 1 2014–2017 769 96 12.5% 59 35 2 2 3 2018–2021 1439 110 7.6% 67 40 4 4 6 2022–2024 1955 157 8.0% 98 60 6 3 9 2025–2026* 1185 97 8.2% 57 43 2 2 2 * 2025–2026 is provisional: CCS 2026 and IMC 2026 have not been held, and IEEE S&P/WWW 2026 abstracts are not fully in OpenAlex. ==== D. HAR: THE FULL-TEXT SWEEP AND ITS HOMOGRAPHS ==== ── Full-text sweep ── Papers with a paper.cols.txt: 5855 Matching /HAR|HTTP Archive|httparchive/: 95 Hand-classified: 95; UNCLASSIFIED (fix the hand map): 0 Verdict Papers Share of the sweep ---------- ------ ------------------ instrument 32 33.7% dataset 14 14.7% citation 36 37.9% mention 2 2.1% homograph 11 11.6% ── The 32 papers that use HAR as their own instrument ── Venue Year Slug ------- ---- -------------------------------------------------------------------------------- IMC 2011 understanding-website-complexity-measurements-metrics-and-implications NDSS 2015 parking-sensors-analyzing-and-detecting-parked-domains IMC 2017 the-ad-wars-retrospective-measurement-and-analysis-of-anti-adblock-filter-lists USENIX 2017 characterizing-the-nature-and-dynamics-of-tor-exit-blocking IEEE-SP 2018 surveylance-automatically-detecting-online-survey-scams WWW 2018 proxytorrent-untangling-the-free-http-s-proxy-ecosystem IMC 2019 an-empirical-study-of-the-cost-of-dns-over-https PETS 2019 4-years-of-eu-cookie-law-results-and-lessons-learned PETS 2019 oblivious-dns-practical-privacy-for-dns-queries WWW 2020 comparing-the-effects-of-dns-dot-and-doh-on-web-performance WWW 2020 jscleaner-de-cluttering-mobile-webpages-through-javascript-cleanup WWW 2020 understanding-the-performance-costs-and-benefits-of-privacy-focused-browser-exte IEEE-SP 2021 crawlphish-large-scale-analysis-of-client-side-cloaking-techniques-in-phishing PETS 2021 oblivious-dns-over-https-odoh-a-practical-privacy-enhancement-to-dns WWW 2021 its-not-just-the-site-its-the-contents-intra-domain-fingerprinting-social-media WWW 2021 where-are-you-taking-me-understanding-abusive-traffic-distribution-systems IMC 2022 respect-the-origin-a-best-case-evaluation-of-connection-coalescing-in-the-wild PETS 2022 are-iphones-really-better-for-privacy-a-comparative-study-of-ios-and-android-app IMC 2023 the-prevalence-of-single-sign-on-on-the-web-towards-the-next-generation-of-web-c PETS 2023 evaluating-practical-quic-website-fingerprinting-defenses-for-the-masses USENIX 2023 reversing-breaking-and-fixing-the-french-legislative-election-e-voting-protocol IMC 2024 diffaudit-auditing-privacy-practices-of-online-services-for-children-and-adolesc IMC 2024 of-choices-and-control-a-comparative-analysis-of-government-hosting IMC 2024 replication-taking-a-long-look-at-quic WWW 2024 quic-is-not-quick-enough-over-fast-internet IEEE-SP 2025 only-as-strong-as-the-weakest-link-on-the-security-of-brokered-single-sign-on-on IMC 2025 where-in-the-world-are-my-trackers-mapping-web-tracking-flow-across-diverse-geog PETS 2025 tracker-installations-are-not-created-equal-understanding-tracker-configuration PETS 2025 gig-work-at-what-cost-exploring-privacy-risks-of-gig-work-platform-participation USENIX 2025 web-execution-bundles-reproducible-accurate-and-archivable-web-measurements IEEE-SP 2026 setting-the-course-but-forgetting-to-steer-analyzing-compliance-with-gdprs-right PETS 2026 more-space-less-privacy-measuring-the-effectiveness-of-ip-based-website-fingerpr By year bucket: 2010–2013 1 | 2014–2017 3 | 2018–2021 12 | 2022–2024 9 | 2025–2026* 7 By venue: IMC 9 | PETS 8 | WWW 7 | IEEE-SP 4 | USENIX 3 | NDSS 1 ── How many HAR-instrument papers does a tool-name query find? ── Of the 32 HAR-instrument papers: name HAR / "HTTP Archive" in any tools[] or otherToolsMentioned[] tuple: 9 (28.1%) have ANY traffic-capture / proxy-interception tuple at all: 16 (50.0%) named in tools[]: PETS/2019/4-years-of-eu-cookie-law-results-and-lessons-learned, WWW/2020/comparing-the-effects-of-dns-dot-and-doh-on-web-performance, WWW/2020/understanding-the-performance-costs-and-benefits-of-privacy-focused-browser-exte, IMC/2024/diffaudit-auditing-privacy-practices-of-online-services-for-children-and-adolesc, IMC/2024/of-choices-and-control-a-comparative-analysis-of-government-hosting, IMC/2024/replication-taking-a-long-look-at-quic, WWW/2024/quic-is-not-quick-enough-over-fast-internet, IEEE-SP/2026/setting-the-course-but-forgetting-to-steer-analyzing-compliance-with-gdprs-right, IEEE-SP/2018/surveylance-automatically-detecting-online-survey-scams ── Crawling papers vs HAR-instrument papers, per venue ── Venue Papers Ran a crawl HAR-instrument papers ------- ------ ----------- --------------------- CCS 990 163 0 IMC 638 132 9 NDSS 701 129 1 PETS 510 123 8 USENIX 1410 221 3 WWW 843 242 7 IEEE-SP 767 110 4 ── Homographs (why the sweep cannot be automated) ── [homograph] USENIX/2018/schrodinger-s-rat-profiling-the-stakeholders-in-the-remote-access-trojan-ecosyst Surname split across a column break: "D HAR - MDASANI" [homograph] CCS/2019/privacy-risks-of-securing-machine-learning-models-against-adversarial-examples "the UCI Human Activity Recognition (HAR) dataset" [homograph] USENIX/2019/stack-overflow-considered-helpful-deep-learning-security-nudges-towards-stronger Surname split across a column break: "B HAR - GAVA" [homograph] CCS/2023/large-language-models-for-code-security-hardening-and-adversarial-testing Identifier split across a column break: "IS_WORD_C HAR" [homograph] USENIX/2023/sqirl-grey-box-detection-of-sql-injection-vulnerabilities-using-reinforcement-le Surname split across a column break: "S HAR , L. K." [homograph] NDSS/2024/campro-camera-based-anti-facial-recognition "Vision-based human activity recognition (HAR)" [homograph] CCS/2025/harnessing-vital-sign-vibration-harmonics-for-effortless-and-inbuilt-xr-user-aut "we derive the Harmonic Amplitude Ratio (HAR)" [homograph] NDSS/2025/radsee-see-your-handwriting-through-walls-using-fmcw-radar "human activity recognition (HAR) using different sensing" [homograph] NDSS/2026/svdefense-effective-defense-against-gradient-inversion-attacks-via-singular-value-decomposition "Human Activity Recognition (HAR). HAR identifies daily activities like walking or sitting" [homograph] NDSS/2026/beyond-conventional-triggers-auto-contextualized-covert-triggers-for-android-logic-bombs "the Human Activity Recognition Dataset (KU-HAR)" [homograph] PETS/2026/sensor-privacy-as-a-spectrum-quantifying-privacy-in-edge-and-multimodal-systems "three widely-used benchmarks: UCI-HAR … UTAH-STM-HAR" [mention] IMC/2011/towards-understanding-modern-web-traffic "While their use of HTTP archive record (HAR) format [25] allows a precise detection of page load events, their data set consists of only …" — describing related work; the paper itself captures packets [mention] PETS/2022/fp-radar-longitudinal-measurement-and-early-detection-of-browser-fingerprinting "HTTP Archive [38] is a related project that archives millions of URLs each month. However, it does not store …" — considered and rejected in favour of the Wayback Machine ── Does a HAR-instrument paper name the writer that produced the file? ── Of 32 instrument papers, 25 (78.1%) mention at least one recognisable writer somewhere in the full text. Writer named anywhere in the paper Papers -------------------------------------- ------ Selenium / WebDriver 13 Chrome DevTools / Network panel 8 mitmproxy / a proxy 6 WebPageTest 4 chrome-har-capturer 3 PhantomJS 3 Puppeteer / Playwright 2 HARExportTrigger 1 Firefox pref devtools.netmonitor.har.* 1 sitespeed.io 1 No recognisable writer named: IMC/2011/understanding-website-complexity-measurements-metrics-and-implications PETS/2021/oblivious-dns-over-https-odoh-a-practical-privacy-enhancement-to-dns PETS/2023/evaluating-practical-quic-website-fingerprinting-defenses-for-the-masses USENIX/2023/reversing-breaking-and-fixing-the-french-legislative-election-e-voting-protocol IEEE-SP/2025/only-as-strong-as-the-weakest-link-on-the-security-of-brokered-single-sign-on-on IEEE-SP/2026/setting-the-course-but-forgetting-to-steer-analyzing-compliance-with-gdprs-right PETS/2026/more-space-less-privacy-measuring-the-effectiveness-of-ip-based-website-fingerpr NOTE: this is a full-text keyword probe, so it OVER-counts — a paper that merely cites Selenium elsewhere scores a hit. Read it as an upper bound on how often the HAR writer is identifiable, not as a measurement of correct reporting. ── Traffic files inside a crawl ── Papers that ran an automated web crawl: 1120 …that name an on-topic capture instrument in tools[]: 156 (13.9%) …that use HAR as an instrument (full-text sweep): 26 (2.3%) …union of the two: 172 (15.4%) ==== E. WHAT THE HAR PAPERS SAY THEY DID WITH IT ==== ── Deciding sentence per instrument paper ── IEEE-SP/2018/surveylance-automatically-detecting-online-survey-scams "SURVEYLANCE implements HTTP Archive 1.2 specification [44], and stores the network traffic traces as HAR objects" IEEE-SP/2021/crawlphish-large-scale-analysis-of-client-side-cloaking-techniques-in-phishing "CrawlPhish stores source code using HAR files [57], which capture all HTTP requests/responses" IEEE-SP/2025/only-as-strong-as-the-weakest-link-on-the-security-of-brokered-single-sign-on-on "Input: HAR Files. We use a public dataset from prior work [34] … Each SSO flow is captured in the JSON-based HAR data format" IEEE-SP/2026/setting-the-course-but-forgetting-to-steer-analyzing-compliance-with-gdprs-right "we captured interactions with the browser by downloading the HAR (HTTP Archive) files"; HAR logs are the ground truth against which data-download packages are scored IMC/2011/understanding-website-complexity-measurements-metrics-and-implications Figure 1 is an example HAR snippet; "This extension generates a report in the HTTP archive record (HAR) format [4]" IMC/2017/the-ad-wars-retrospective-measurement-and-analysis-of-anti-adblock-filter-lists "we store all HTTP requests/responses in a HAR file [25]"; discards partial HARs below 10% of average size IMC/2019/an-empirical-study-of-the-cost-of-dns-over-https "we use the sitespeed.io project to instruct Firefox for the measurements and collect HAR files with the performance statistics" IMC/2022/respect-the-origin-a-best-case-evaluation-of-connection-coalescing-in-the-wild "Chrome developer tools were used to retrieve and write the page load data as an HTTP Archive format (HAR) file" IMC/2023/the-prevalence-of-single-sign-on-on-the-web-towards-the-next-generation-of-web-c "the HTTP transaction log (HAR format)" IMC/2024/diffaudit-auditing-privacy-practices-of-online-services-for-children-and-adolesc "we export the trace as a HAR (HTTP Archive) file [49], as provided by the Network Panel" for web, PCAP for mobile IMC/2024/of-choices-and-control-a-comparative-analysis-of-government-hosting "which are then consolidated into an HTTP Archive (HAR) file" IMC/2024/replication-taking-a-long-look-at-quic "PLT values are extracted from ‘onLoad’ field of HAR files [33] produced by the chrome-har-capturer tool" IMC/2025/where-in-the-world-are-my-trackers-mapping-web-tracking-flow-across-diverse-geog "recording HAR files and all network requests during page loads" NDSS/2015/parking-sensors-analyzing-and-detecting-parked-domains "recorded a trace of all HTTP requests initiated by the web page (HAR)"; five of its features are HAR features PETS/2019/4-years-of-eu-cookie-law-results-and-lessons-learned "they dump to file the HTTP Archive (HAR) [55], a JSON-formatted … We look at all HTTP responses with Set-Cookie header in the HAR file." Also analyses the httparchive.org corpus — counted in both. PETS/2019/oblivious-dns-practical-privacy-for-dns-queries "Chrome webdriver and record HAR files for each browsing session" PETS/2021/oblivious-dns-over-https-odoh-a-practical-privacy-enhancement-to-dns "capture the page load session into an HTTP Archive (HAR) file additionally recording the results of the window.performance API" PETS/2022/are-iphones-really-better-for-privacy-a-comparative-study-of-ios-and-android-app "using mitmproxy to capture network traffic in the HAR format" PETS/2023/evaluating-practical-quic-website-fingerprinting-defenses-for-the-masses "We perform HAR captures and we identify the protocols used by those websites" PETS/2025/gig-work-at-what-cost-exploring-privacy-risks-of-gig-work-platform-participation "collect all HTTP traffic generated during our interactions with these platforms in the form of HAR files" PETS/2025/tracker-installations-are-not-created-equal-understanding-tracker-configuration "both through the network HAR file and using Chrome’s manifest v2 webNavigation feature" PETS/2026/more-space-less-privacy-measuring-the-effectiveness-of-ip-based-website-fingerpr "we capture HTTP Archive (.har) files to record all domain connections initiated during the browsing session" USENIX/2017/characterizing-the-nature-and-dynamics-of-tor-exit-blocking "we first rule out cases of client and network errors through HAR file analysis" USENIX/2023/reversing-breaking-and-fixing-the-french-legislative-election-e-voting-protocol "These are gathered into HTTP Archive format (HAR) files that can be easily generated by major browsers" USENIX/2025/web-execution-bundles-reproducible-accurate-and-archivable-web-measurements Measures HAR and WARC replay against its own .web format: "we successfully visited 8,523 origins with 311 HAR and 44 WARC (overlapping) issues replaying responses" WWW/2018/proxytorrent-untangling-the-free-http-s-proxy-ecosystem "Data is collected as an HTTP Archive (HAR); for this, we have extended PhantomJS’s HAR capturer" WWW/2020/comparing-the-effects-of-dns-dot-and-doh-on-web-performance "For each HAR file that we collected with our automated browser, we extract the onLoad timing"; reports the first-query 0 ms DNS-timing artefact WWW/2020/jscleaner-de-cluttering-mobile-webpages-through-javascript-cleanup "Webpagetest also records the full waterfall HTTP Archive (HAR) representation of the session" WWW/2020/understanding-the-performance-costs-and-benefits-of-privacy-focused-browser-exte "we automatically extract the HAR through a modified version of the open source HARExportTrigger extension" WWW/2021/its-not-just-the-site-its-the-contents-intra-domain-fingerprinting-social-media "We capture the HAR (HTTP Archive) files … by setting the preference devtools.netmonitor.har.enableAutoExportToFile in Firefox"; also runs tcpdump WWW/2021/where-are-you-taking-me-understanding-abusive-traffic-distribution-systems "Manually investigating HTTP archive files, we verified if any of the 1,339 pages labeled earlier … are truly impersonating" WWW/2024/quic-is-not-quick-enough-over-fast-internet "Using chrome-har-capturer [12], we build scripts to collect HTTP Archive (HAR) files" ==== Z. FIGURES ON THE PAGE THAT ARE NOT FROM THIS CORPUS ==== Every number below is external to the publications dataset. Its primary source is recorded on provenance:programming:traffic_files; scripts/external_checks_traffic_files.sh re-fetches each one. This block is a POINTER, not a source of truth. The authoritative list of external figures, each with the primary source it was fetched from, is in scripts/verify_traffic_figures.mjs (EXTERNAL FIGURES) and is re-fetched by scripts/external_checks_traffic_files.sh. Two sibling scripts drifted apart here once already — this block carried mitmproxy 12.1.2 / Wireshark 4.6.2 / Chrome 127 as "current" while the page correctly said 12.2.3 / 4.6.8 / 130, and the stale copy was reproduced verbatim in the provenance page's "unedited report output". Caught by review on 2026-08-14. node scripts/verify_traffic_figures.mjs sh scripts/external_checks_traffic_files.sh
7. The two experiments
Both run against sandbox/fixture_traffic.mjs, a local page built specifically to hit the places where the recordings disagree: a three-hop 302 chain, four script-initiated fetch calls, a POST with a JSON body, a 200 KiB response, a route that is never answered, a WebSocket with two frames each way, and an <img> whose origin the page's own CSP forbids.
Environment: Playwright 1.62.1 driving chromium_headless_shell from /workspace/.playwright; mitmproxy 11.0.2 installed into /tmp/mitmlib (the current release is 12.2.3 — the page says so); Linux aarch64; 14 August 2026.
7.1 har_vs_cdp.mjs — full output
- har_vs_cdp.txt
fixture: http://127.0.0.1:8098/ playwright: 1.62.1 har creator: Playwright 1.62.1, HAR version 1.2 har files: /tmp/harcdp-POW6Tb/har-omit.har (20566 B), /tmp/harcdp-POW6Tb/har-embed.har (226719 B) HAR (omit) HAR (embed) CDP entries / requests 12 12 11 …of which redirect hops 2 2 2 …of which never completed (status -1 / loadingFailed) 2 2 2 entries carrying response body text 0 6 on demand (Network.getResponseBody) entries with an initiator / call stack 0 0 11 …with a JS stack frame 0 0 5 entries with a resource type 12 12 11 entries with a frame id 12 12 11 entries with serverIPAddress 8 8 7 WebSocket connections 1 1 1 WebSocket frames 0 4 4 --- what each recording says about the same four things --- /beacon HAR keys on the entry: pageref, startedDateTime, time, request, response, cache, timings, _resourceType HAR timings: {"dns":-1,"connect":-1,"ssl":-1,"send":0,"wait":0.868,"receive":-1} HAR startedDateTime: 2026-08-14T02:56:47.617Z /post HAR request.postData: {"mimeType":"application/json","text":"{\"id\":\"u-42\",\"ts\":1}","params":[]} /big content.size / text len (embed): 204800 / 204800 /big content.size / text len (omit): 204800 / absent --- cookies --- response.cookies on the main document (HAR): [{"name":"http_cookie","value":"xyz789","path":"/","httpOnly":true}] Set-Cookie response headers on the main document (HAR): [{"name":"set-cookie","value":"http_cookie=xyz789; Path=/; HttpOnly"}] cookies in the browser jar at the end of the load (context.cookies()): http_cookie(httpOnly=true), pixel_id(httpOnly=false), js_cookie(httpOnly=false), beacon_id(httpOnly=false) → the jar has 4; the HAR's per-entry cookie arrays are per-transaction, not a jar dump. --- URLs each recording saw --- HAR only: ws://127.0.0.1:8098/ws CDP only: (none) both: 11 URLs CSP-blocked image requested by the document: in HAR? true; in CDP? true CDP loadingFailed: http://127.0.0.99:1/blocked-by-csp.gif errorText="" blockedReason="csp" http://127.0.0.1:8098/beacon?u=http%3A%2F%2F127.0.0.1%3A8098%2F errorText="net::ERR_ABORTED" blockedReason=undefined --- the two requests the browser never completed --- blocked-by-csp HAR: status=-1 statusText="" _failureText="csp" bodySize=-1 CDP: errorText="" blockedReason="csp" canceled=false /slow HAR: status=-1 statusText="" _failureText=undefined bodySize=-1 CDP: errorText=undefined blockedReason=undefined canceled=undefined --- non-standard ("_"-prefixed) fields this writer emits --- log.entries._resourceType log.entries._securityDetails log.entries._serverPort log.entries._webSocketMessages log.entries.response._failureText log.entries.response._transferSize --- file size --- content:'omit' 20566 B content:'embed' 226719 B (11.0x, for one 200 KiB response body) sum of response.content.size across all entries: 205679 B base64 inflation on the embedded bodies: 100.2% of the raw body bytes
Stability. Run three times consecutively. The per-URL outcome table was identical each time; only the ordering of entries within the HAR varied, and the byte counts moved by tens of bytes (timestamps). The two disagreements the page reports — HAR marks /slow failed and the beacon complete, CDP the reverse — reproduced on all three runs.
7.2 mitm_vs_browser.mjs — full output
- mitm_vs_browser.txt
mitmproxy creator: mitmproxy 11.0.2, HAR 1.2 browser creator: Playwright 1.62.1, HAR 1.2 browser HAR mitmproxy HAR entries 12 11 distinct URLs 12 11 entries with response body text 0 10 entries with _resourceType 12 1 entries with a pageref 12 0 log.pages 1 0 entries with serverIPAddress 8 11 WebSocket entries 1 0 in the browser HAR only: http://127.0.0.99:1/blocked-by-csp.gif, ws://127.0.0.1:8098/ws in the mitmproxy HAR only: /ws file sizes browser HAR (content omitted) 20453 B mitmproxy HAR (bodies included) 261692 B mitmproxy .flows (its own format) 232420 B ratio, mitmproxy HAR / browser HAR 12.8x serverIPAddress recorded by each side browser HAR: 127.0.0.1 (the address the browser connected to = the proxy) mitmproxy HAR: 127.0.0.1 (the address the proxy connected to = the origin) NOTE: on this target both are loopback, so the two values coincide and this run does not by itself show the difference — re-run against a remote origin. mitmproxy HAR entry keys: _resourceType, _webSocketMessages, cache, request, response, serverIPAddress, startedDateTime, time, timings browser HAR entry keys: _resourceType, _securityDetails, _serverPort, cache, pageref, request, response, serverIPAddress, startedDateTime, time, timings
Re-run against a remote origin, to test the serverIPAddress claim that the loopback fixture cannot show:
- mitm_vs_browser_remote.txt
mitmproxy creator: mitmproxy 11.0.2, HAR 1.2 browser creator: Playwright 1.62.1, HAR 1.2 browser HAR mitmproxy HAR entries 1 1 distinct URLs 1 1 entries with response body text 0 1 entries with _resourceType 1 0 entries with a pageref 1 0 log.pages 1 0 entries with serverIPAddress 1 1 WebSocket entries 0 0 in the browser HAR only: (none) in the mitmproxy HAR only: (none) file sizes browser HAR (content omitted) 2491 B mitmproxy HAR (bodies included) 5831 B mitmproxy .flows (its own format) 8253 B ratio, mitmproxy HAR / browser HAR 2.3x serverIPAddress recorded by each side browser HAR: 127.0.0.1 (the address the browser connected to = the proxy) mitmproxy HAR: 104.20.23.154 (the address the proxy connected to = the origin) Behind a proxy, every serverIPAddress in the browser's HAR is the proxy's. mitmproxy HAR entry keys: cache, request, response, serverIPAddress, startedDateTime, time, timings browser HAR entry keys: _resourceType, _securityDetails, _serverPort, cache, pageref, request, response, serverIPAddress, startedDateTime, time, timings
7.3 The snippet the page publishes
sandbox/har_vs_cdp_core.mjs is the code in the page's <file javascript> block, extracted from the page source and run, so that the three-line output quoted beside it is that script's real output rather than a retyped one:
HAR entries with an initiator: 0 CDP requests with an initiator: 11 CDP requests with a JS stack: 5
8. Verification
8.1 Per-paper figures
Every literal figure the page attributes to a paper was checked against that paper's own paper.cols.txt with whitespace normalised — not against evidence.quote, because detection[].prevalence is a model summary of a result rather than a quotation. 17 literals, 0 missing.
- traffic_files_figures.txt
=== per-paper figures, checked against paper.cols.txt (whitespace normalised) USENIX/2025/web-execution-bundles-reproducible-accurate-and-archivable-web-measurements ok 0.7% ok 13.9% ok 13.3% ok 8,523 ok 311 ok 44 ok 8,544 ok 778,500 ok 776,229 ok 0.3% ok 6,043 === verbatim quotes USENIX/2025/web-execution-bundles-reproducible-accurate-and-archivable-web-measurements ok "HAR is developed to record all requests that leave the browser" ok "the drawback of replaying content rather than recording and inspecting the executions directly" CCS/2016/online-tracking-a-1-million-site-measurement-and-analysis ok "we chose to use Mitmproxy" ok "to record all HTTP Re" WWW/2020/comparing-the-effects-of-dns-dot-and-doh-on-web-performance ok "the first query that a HAR contains can show DNS timings of 0 ms" IMC/2022/respect-the-origin-a-best-case-evaluation-of-connection-coalescing-in-the-wild ok "as an HTTP Archive format (HAR) file" 17 literals checked, 0 missing. NOTE: presence is not pairing. "X of Y" was additionally read in context — see provenance:programming:traffic_files §quotes spot-checked. === EXTERNAL FIGURES — every number on the page that is NOT from the corpus Each was fetched by scripts/external_checks_traffic_files.sh on 2026-08-14. HAR 1.2 spec version; written 2011, W3C draft dated 2012, abandoned Chrome 130 October 2024; sanitized HAR export becomes the default chrome-har-capturer 0.14.4 npm, published 2026-01-27 mitmproxy 12.2.3 released 2026-05-12 (the runs on this page used 11.0.2) Wireshark 4.6.8 current stable tcpdump 4.99.6 latest tag libpcap 1.10.6 latest tag Playwright 1.62.1 the version the fixture runs used Playwright 1.60 tracing.startHar()/stopHar() added (May 2026) Playwright 1.61 "HAR and trace recordings now include WebSocket requests" (June 2026) HARExportTrigger 0.6.1 last release, May 2018; repo archived, description "DEPRECATED" selenium-wire repo archived January 2024 BrowserMob Proxy last tagged release 2016; last commit 2024 draft-ietf-opsawg-pcap rev 08, intended status Historic draft-ietf-opsawg-pcapng rev 05, Informational WARC 1.1 / ISO 28500:2017 the WARC standard design:archives covers Okta: 28 Sept – 17 Oct 2023, 5 customers' sessions hijacked, 134 customers initially reported, scope revised 29 November 2023 1500 ms Firefox devtools.netmonitor.har.pageLoadedTimeout default five-line key log one https://example.com/ load with --ssl-key-log-file, 2026-08-14 === TOKENS — the exact digit tokens the above produce, isolated so that check_page_numbers.mjs (which splits on the second dot in a version string) can match them. Each is accounted for immediately above. 0.14 4 12.2 3 4.6 8 4.99 6 1.10 6 1.62 1 1.60 1.61 0.6 1 08 05 130 1500 1.2 5 134 2.1 4 1,000 802.15 12.8 127.0 0.1 127.0.0.99 104.20 23.154 8098 8081 2500 === NOT FIGURES — digit fragments the page contains that are not measurements 127.0.0.1, 127.0.0.99 loopback addresses in the fixture output 104.20.23.154 example.com's address as the proxy saw it on 2026-08-14. NOT a constant: example.com is on Cloudflare anycast and this rotates. It was listed here as an unchanging "not a figure" once, which let a WRONG value (172.66.147.243, from an unrelated earlier curl) survive the stale-number guard. Caught by review 2026-08-14. 8098, 8081 fixture and proxy ports 802.15.4 a radio standard named in the fold 2500 a waitForTimeout argument in published code 200 KiB, 204, 302, 101, -1 HTTP sizes and status codes
Presence is not pairing, so the Hantke et al. figures were additionally read in context. The sentence behind “less than 0.3%” is: “In total, we count 778,500 requests in HAR after filtering out non-page-related requests like service workers or initial redirects, while we see 776,229 requests captured via WebREC for 8,544 successfully crawled origins. This makes a negligible difference of less than 0.3%.” Numerator, denominator and percentage are one sentence. Likewise “we observed an average difference across all origins of 0.7% between .web and BL, we measured 13.9% for HAR and 13.3% for WARC replayed responses” and “we successfully visited 8,523 origins with 311 HAR and 44 WARC (overlapping) issues replaying responses”.
8.2 Evidence quotes behind the capture-tool figures
node scripts/quote_check.mjs –tools 'mitmproxy|tcpdump|wireshark|tshark' over the whole corpus:
357 quotes checked: 229 exact, 87 partial (>=60% of 5-word windows), 41 below threshold, 0 with no full text on disk.
Below-threshold is not “unsupported”. The lowest-scoring one is the single most-quoted sentence on the content page, Englehardt & Narayanan's, at 20% — and it is verbatim in the paper. The .cols rendering reads “After examining several Python HTTP proxies, we chose to use Mitmproxy6 to record all HTTP Re-quest and Response headers”: a footnote marker and a hyphenation split by the two-column repair. Checked by hand; the extraction is faithful. Two others were spot-checked the same way (respect-the-origin, comparing-the-effects-of-dns-dot-and-doh) and both are present verbatim.
8.3 External facts
scripts/external_checks_traffic_files.sh re-fetches every non-corpus fact. Run 2026-08-14; every check returned. Findings that changed what the page says:
| Claim | Primary source | Verdict |
|---|---|---|
| HAR 1.2 is a W3C standard | w3c.github.io/web-performance/specs/HAR/Overview.html | False. The document opens “\*DO NOT USE\* This document was never published by the W3C Web Performance Working Group and has been abandoned.” |
| …and the copy several papers cite says so | dvcs.w3.org/hg/webperf/raw-file/tip/specs/HAR/Overview.html | No. That copy carries no banner. (It also answered 403 to one of two fetches on the same day — treat availability as unreliable.) |
| har.fyi is the HAR spec | har.fyi | No — “A new reference doc for the HTTP Archive dataset”. A third thing called HTTP Archive. Do not cite it as a format spec. |
| pcap / pcapng are standardised | IETF Datatracker API | No. draft-ietf-opsawg-pcap rev 08 (intended status Historic) and draft-ietf-opsawg-pcapng rev 05 (Informational) are Internet-Drafts. |
| WARC | iipc.github.io/warc-specifications/ | WARC 1.0 and 1.1 listed as standard; ISO 28500:2017 is the published edition (WebSearch only — iso.org answered 403). |
| mitmproxy current | GitHub releases API | v12.2.3, 2026-05-12. The runs on this page used 11.0.2 and the page says so. |
–set hardump still exists | docs.mitmproxy.org/stable/concepts/options/ | Yes: “Save a HAR file with all flows on exit.” |
| Wireshark / tcpdump / libpcap | wireshark.org, GitHub tags | 4.6.8 / tcpdump-4.99.6 / libpcap-1.10.6 |
| chrome-har-capturer abandoned | npm registry + GitHub | No — 0.14.4 published 2026-01-27, repo pushed 2026-08-12. Actively maintained. |
selenium-wire | GitHub API | archived: true, last push 2024-01-03 |
| HARExportTrigger | GitHub API | archived: true, description “DEPRECATED”, last push 2019-03-28, last release 0.6.1 (May 2018) |
| BrowserMob Proxy | GitHub API | not archived, but last push 2024-05-30 and last tagged release 2016 |
| Catapult / Web Page Replay | GitHub API | GitHub mirror archived and marked “Deprecated Catapult GitHub”; the live source is chromium.googlesource.com/catapult |
| pywb / warcprox | GitHub releases API | maintained: pywb v-2.9.1 (2025-10-07), warcprox v2.13.1 (2026-05-11) |
| Chrome sanitises HAR by default | developer.chrome.com/blog/new-in-devtools-130 | Yes, since Chrome 130: “the network log exported in HAR format will no longer contain Cookie, Set-Cookie, and Authorization headers by default” — and nothing else |
| Firefox HAR defaults | browser/app/profile/firefox.js in mozilla-firefox/firefox main | includeResponseBodies true, enableAutoExportToFile false, multiple-pages false, pageLoadedTimeout 1500 |
| Okta HAR incident | sec.okta.com root-cause post | “Some of these files were HAR files that contained session tokens which could in turn be used for session hijacking attacks”; 5 customers' sessions hijacked; 134 customers initially; scope revised 2023-11-29 |
| Okta sanitiser guidance | support.okta.com/help/s/article/sanitizing-http-traces | “There is no attempt to remove user information as part of the sanitization process” |
| A maintained HAR sanitiser exists | GitHub API | No. google/har-sanitizer and cloudflare/har-sanitizer are both archived: true as of 2026-08-14 |
| Chromium writes a TLS key log | run locally | Yes — –ssl-key-log-file produced a 5-line NSS key log for one https://example.com/ load |
8.4 Sources rejected
har.fyias a HAR-format reference. It is the HTTP Archive dataset documentation. A sub-agent's first pass proposed it as the modern spec home; rejected after reading its own tagline.- Secondary reporting on the Okta incident. Widely-repeated sentences attributed to Cloudflare and BeyondTrust about what was inside their HAR files could not be traced to a primary source: BeyondTrust's blog returns HTTP 403 to every non-browser client, and 1Password's own post says only that it “detected suspicious activity on our Okta instance” with “no 1Password user data accessed”. A draft of the page asserted that all three “reported follow-on intrusion attempts using session tokens lifted from those files”. That sentence was cut and replaced with Okta's own words, which are primary and sufficient.
- Fiddler licensing news. A widely-cited August 2026 post about Progress/Telerik restricting Fiddler Classic to non-commercial use is by Fiddler's original author on a personal blog, not by the vendor. The page says only that Fiddler Classic is no longer in active development, which the vendor's own product pages support.
- “Other HAR-leak incidents”. Searched for; none found with a primary source. The page therefore names exactly one incident and does not imply a pattern.
- A licence for the HTTP Archive BigQuery dataset. Could not be established from
httparchive.orgorhar.fyi. The page does not state one.
8.5 What could not be established
- How much a browser HAR and a proxy HAR of the same crawl disagree at scale. The fixture demonstrates the mechanisms on one synthetic page; nothing in this corpus quantifies the gap over a top-list crawl. This is on the page as a
<wrap todo>. - Whether Chrome's HAR export includes response bodies by default. Firefox's answer is in the pref file; Chrome's current documentation does not restate a default for body inclusion, only for the header sanitisation. The page states the Firefox default and does not claim a Chrome one.
- Whether venue artifact-evaluation processes say anything about releasing traffic captures. The public CFP and artifact pages of IEEE S&P 2026, IMC 2025/2026 and PoPETs were fetched and contain no clause specific to HAR files, pcaps or network captures — guidance stops at the generic Menlo-Report level. That is a verified negative, and the page does not claim venue guidance exists.
- The 32 HAR-instrument papers are a floor, not a count. A paper that captured HAR files and never wrote the word is invisible to a full-text sweep.
9. Errors caught in review, and what caught them
Kept as a log, because the useful part is which check fired.
| # | What was wrong | What caught it |
|---|---|---|
| 1 | The hand map was keyed year/venue/slug; the report keys venue/year/slug. All 94 verdicts silently missed. | report_traffic_files.mjs fails loudly when the sweep returns an unclassified paper — it printed all 95. |
| 2 | The sweep found 95 papers; a grep -rlP with the same regex had found 94. WWW/2022/reproducibility-and-replicability-of-web-measurement-studies was missing from the shell result. | Cross-checking the two sweeps. The Node sweep is authoritative and is the one in the report. |
| 3 | “By year bucket” and “By venue” printed each other's values, because the key-order fix was applied to the map but not to the two split('/') index reads below it. | Reading the output: it said “By venue: 2025 5” followed by “2021 4”. |
| 4 | Adding adafruit to the radio family moved one paper out of packet capture. Seven figures on the page went stale in one edit: 288→287, 512→511, 164→165, 42.4→42.3, 62.3→62.2, 36.9→37.0, 73→72 — and 659→662, 129→130, 12.4→12.3 from an unrelated fold edit. The page had already been written with all of them. | check_page_numbers.mjs, run whole-page with –code. It also caught an eighth, “164 excluded papers”, sitting in the limitations section outside any table. |
| 5 | The <code> block quoting the mitmproxy comparison held byte counts from an earlier run (20472/261704/232414 against a later run's 20453/261692/232420). | A line-by-line equality check of every <code> block against the run output it claims to be, both directions. A substring check would have passed. |
| 6 | The three-line output beside the published <file javascript> snippet had never been produced by that snippet. | Extracting the block from the page source, writing it to sandbox/har_vs_cdp_core.mjs and running it. It does produce exactly those three lines. |
| 7 | The page asserted Cloudflare, 1Password and BeyondTrust each described a session token in their own HAR file. | The industry-verification pass, which flagged it UNVERIFIED and could not reach two of the three primary sources. Sentence cut — see §8.4. |
| 8 | The page cited Siby et al. as evidence that a proxy downgrades QUIC. They do not say that; they capture at the browser and packet layers instead of proxying. | Re-reading the cited paper rather than the citation. Claim reworded. |
| 9 | scripts/external_checks_traffic_files.sh asked the GitHub releases endpoint for tcpdump, libpcap and chrome-har-capturer, which publish tags rather than releases, and printed blank lines. | The rule that every check must print FAILED explicitly. Switched those three to the tags and npm endpoints. |
Review passes are logged in §10 once run.
10. Review log
Three focused passes and the author's own read, all against the frozen snapshot rev 1786677596 (pages/programming_traffic_files.txt md5 d165a98f56316b0d2c618128bc9d801d). Each reviewer was told its context might not be exhaustive and was handed the page, the provenance, the scripts and their committed output. Nothing was edited while they ran.
10.1 Figures vs script (''sonnet'')
| # | Finding | Verdict |
|---|---|---|
| F1 | The page said the mitmproxy HAR recorded 172.66.147.243 for example.com; the committed run says 104.20.23.154. The wrong value came from an unrelated curl earlier in the session. Worse, it had been added to verify_traffic_figures.mjs’s NOT FIGURES allowlist as a constant, which is exactly how it survived check_page_numbers.mjs. | Accepted. Page corrected, and the reviewer's second point is the more important one: example.com is on Cloudflare anycast, so that address is not a constant at all. The page now says so, and the allowlist entry says so. An allowlist entry is an assertion that a number cannot go stale — writing one is how you disable the guard. |
| F2 | “mitmproxy is reported three times better than wireshark” — 24.8% / 12.3% is 2.0×, not 3×. (The “seven times…tcpdump” half, 24.8/3.4, was right.) | Accepted. Corrected to “twice as often”. A ratio computed in prose is not covered by any of the guards. |
| F3 | The offtopic: commercial VPN / residential proxy family also swallowed Squid, Squid ICAP modules, Privoxy, Tinyproxy, 3proxy, wwwoffle — self-hosted forward and caching proxies — plus ProxySQL (a database proxy) and netcat. §2.1's defence of that row discussed only Tor and commercial VPNs and never engaged with what was actually in it. | Accepted, and it is the finding with the widest blast radius. Squid and friends are now their own on-topic family; ProxySQL, HA-Proxy, the DNS proxies and netcat are a separate, honestly-named off-topic family. Downstream: on-topic 511→514, off-topic-only 165→162, web subset 186→188, and six percentages moved. |
| F4 | report_traffic_files.mjs’s closing block hardcoded “mitmproxy 12.1.2 / Wireshark 4.6.2 / Chrome 127” as current while the page correctly said 12.2.3 / 4.6.8 / 130 — and the stale copy was reproduced verbatim in §6 of this page. | Accepted. That block is now a pointer to verify_traffic_figures.mjs and external_checks_traffic_files.sh rather than a second, drifting copy. A provenance page that embeds a script's output inherits that script's stale numbers. |
The same pass re-ran the report (plain and –wiki, byte-identical to the committed output), re-ran the figure verifier, re-ran both experiments three times, and confirmed papers-not-tuples, sentinel handling, usedOrMentioned filtering, both-ended year buckets and every denominator in “Use in Publications”. No other issue found.
10.2 Citations and quotes (''sonnet'')
| # | Finding | Verdict |
|---|---|---|
| C1 | “BrowserMob Proxy … last tagged release 2016” — the last GitHub Release is 2.1.4 (December 2016), but a later 2.1.5 git tag exists from September 2017. | Accepted; wording tightened to distinguish a Release from a tag. |
| C2 | figueira2024_diffaudit was cited as evidence that “the mobile-privacy literature is built on [an intercepting proxy]” — but DiffAudit's mobile side uses PCAPdroid, which the page's own taxonomy puts in the packet layer, not the proxy layer. | Accepted, and it is the sharpest kind of finding: the page blurred its own central distinction in a supporting sentence. The claim now rests on kollnig2022_iphones alone, and DiffAudit is given as the counter-example it actually is. |
All 16 {[key]} citations resolve; 279 keys in the bibliography, 279 unique; all 14 new entries match Crossref on authors, title, year, DOI, and the three hand-written PoPETs entries match on volume, issue and pages. Every quotation verified verbatim after whitespace normalisation. Every claim-to-paper attribution checked, including all eleven Hantke et al. figures for numerator/denominator/percentage coming from the same sentence. The “six papers cite a W3C HAR URL” figure was independently reproduced (two dvcs.w3.org, four w3c.github.io). No missing citations, no footnote/citation mismatches.
10.3 External currency (''sonnet'')
| # | Finding | Verdict |
|---|---|---|
| E1 | Playwright's HAR API has moved: tracing.startHar() / stopHar() arrived in 1.60 (May 2026), recordHar takes mode and urlFilter as well as content, and 1.61 (June 2026) added “HAR and trace recordings now include WebSocket requests”. The page's own experiment runs 1.62.1 and reported WebSocket entries as if that were long-standing HAR behaviour. | Accepted, and independently re-verified here against the installed playwright-core type definitions and Playwright's release notes. This is the best finding of the three passes: the page was presenting a six-week-old writer feature as a property of the format. The writers table now names the tracing API and the version boundary, and the “what a HAR loses” list gained a bullet saying the WebSocket rows are about the writer, not the format. |
| E2 | “classic WebDriver has no network commands at all … this is why Selenium crawls end up with a proxy bolted on” is true of classic WebDriver but misleading today: WebDriver BiDi gives Selenium native network interception. | Accepted in part. The qualifier was already there, but the surrounding sentence read as current practice. Reworded, with a pointer to crawler, which covers BiDi and its bugs at length. Selenium still ships no HAR writer, which is the row's actual point. |
| E3 | The page missed Okta's investigation-closure statement of 8 February 2024. | Accepted. Added as a footnote. It revises no figure — and, as the earlier industry pass noted, despite its /harfiles/ URL it contains no HAR-specific text. |
| E4 | The “no maintained HAR sanitiser” claim survives, but the search behind it was narrower than the claim: harmor (last commit April 2025), Beyond Identity's har-sanitize (November 2023) and Edgio's har-tools (publisher shut down January 2025) were never named. | Accepted. All three are now named and dismissed on the page. A negative claim has to show its search, or a reader who finds one candidate in one query concludes it was never researched. |
| E5 | Two small imprecisions: BrowserMob's tag year (same as C1), and this page's “har-spec has not moved since 2019” against a last commit the reviewer dates to April 2018. | Accepted with a caveat. The two reviewers give different years and GitHub rate-limited the re-check, so the page now says “dormant for years” — which both agree on — rather than a year neither could confirm together. |
The same pass independently re-verified the HAR abandonment banner, the two dvcs.w3.org/w3c.github.io copies, har.fyi’s subject, both IETF drafts, WARC/ISO 28500, seven tool versions, every maintenance-status call, the Chrome 130 wording, all ten Firefox prefs read from firefox.js, –set hardump, the QUIC/custom-CA limitation, SSLKEYLOGFILE for both browsers, and ~20 URLs for liveness. One 403 (iso.org), already disclosed in §8.3. Nothing else superseded.
10.4 The author's own read
Three fixes found by re-reading rather than by any check: the WebPageTest row put its citation where it looked like it supported a vendor-ownership claim; “papers that used HARExportTrigger cannot be reproduced with it today” asserted something never tested (the extension is archived, which is the actual point); and “the absence of CCS is real” invited a causal reading. The last was sharpened rather than softened after measuring it — CCS contributes 163 crawling papers to IMC's 132 and produces 0 HAR-instrument papers to IMC's 9, which is a stronger statement than the original and is now backed by a per-venue table in the report.
10.5 What the review layer cost and returned
Ten accepted findings, zero rejected. The three passes disagreed usefully: only the figures pass could have found F3 and F4 (they need the scripts re-run), only the citation pass could have found C2 (it needs the cited paper read), and only the currency pass could have found E1 (it needs today's release notes). A fourth, generic pass (fable, no checklist) was launched after the other three had been applied, and had not returned when this log was first published. It is reading the page and this provenance page against the “no MDN, no textbook” test, for overstated claims, unmeasured framing sentences, internal contradictions and scope overlap with archives and crawler. Its findings will be appended here as §10.6 rather than folded silently into the sections above, so that what the first three passes missed stays visible.
11. Conventions
This provenance page carries no ~~DISCUSSION~~ block, following the convention set by the existing provenance: pages: comments belong on the content page, where a reader is. It adds no bibliography entries of its own — it cites the same {[key]} keys as traffic_files against the shared bibliography.
Related
- traffic_files — the content page this backs.
- corpus — the corpus-wide provenance: venue scope, selection funnel, field stability, and why 2025–2026 is provisional.
