Implementation Guidelines

Production
Tuned
Engine
Must load files from disk on every request. No in-memory caching, no memory-mapped files, no pre-loaded file buffers. Compression must use the framework's standard middleware or built-in static file handler — no handmade compression code. Serving pre-compressed `.br`/`.gz` variants from disk **is allowed**, but only through a documented framework API (e.g. ASP.NET `MapStaticAssets`, nginx `gzip_static` / `brotli_static`, Caddy `precompressed`). No custom file-suffix lookup logic.
May cache files in memory at startup, use memory-mapped files, pre-rendered response headers, or any caching strategy. May serve pre-compressed files (.gz, .br) from disk via any mechanism. Free to use any compression approach.
No specific rules. Ranked separately from frameworks.

Serves 20 static files of various types and sizes over HTTP/2 with TLS, simulating a realistic browser page load with multiplexed streams.

Connections: 256, 1,024 Concurrent streams per connection: 32

Workload

The load generator (h2load) requests 20 static files in a round-robin pattern across multiplexed streams. All requests include Accept-Encoding: br;q=1, gzip;q=0.8.

  • CSS (5 files, 8–55 KB): reset.css, layout.css, theme.css, components.css, utilities.css
  • JavaScript (5 files, 15–400 KB): analytics.js, helpers.js, app.js, vendor.js, router.js
  • HTML (2 files, 5–8 KB): header.html, footer.html
  • Fonts (2 files, 20–25 KB): regular.woff2, bold.woff2
  • SVG (2 files, 12–55 KB): logo.svg, icon-sprite.svg
  • Images (3 files, 15–120 KB): hero.webp, thumb1.webp, thumb2.webp
  • JSON (1 file, 3 KB): manifest.json

Total payload: ~1.16 MB across 20 files (~966 KB compressible text + ~200 KB binary).

Pre-compressed versions (.gz, .br) are available on disk. See the HTTP/1.1 static files compression section for full compression rules.

What it measures

  • Static file serving throughput over HTTP/2
  • HTTP/2 multiplexing efficiency with varied response sizes
  • Content-Type handling for different file types
  • File serving strategy efficiency (disk I/O vs caching, depending on type)
  • TLS overhead with realistic mixed payloads
  • Compression efficiency (optional — reduces I/O at the cost of CPU)

Expected request/response

GET /static/reset.css HTTP/2
HTTP/2 200 OK
Content-Type: text/css

(file contents)
GET /static/app.js HTTP/2
HTTP/2 200 OK
Content-Type: application/javascript

(file contents)

How it differs from baseline-h2

Baseline (HTTP/2)Static Files (HTTP/2)
EndpointSingle GET /baseline220 different /static/* URIs
Response size~2 bytes3–400 KB (varied)
Content typestext/plainCSS, JS, HTML, fonts, SVG, WebP, JSON
h2load modeSingle URIMulti-URI (-i flag, round-robin)

Parameters

ParameterValue
Endpoint20 URIs under /static/*
Connections256, 1,024
Streams per connection32 (-m 32)
Duration5s
Runs3 (best taken)
Load generatorh2load with -i (multi-URI)