GET /header-flood
Returns N custom response headers. Tests header size limits in clients, proxies, and load balancers. Many stacks reject or silently drop responses above a threshold.
n
Number of X-Chaos-Header-* headers to add. Range: 1–100. Default: 20.
build a request:
expect: 200 OK with N synthetic X-Chaos-Header-* headers. Proxies and clients that enforce a header-count limit may drop the response.
curl -i https://chaos.catastrophic.io/header-flood?n=20
import urllib.request
resp = urllib.request.urlopen("https://chaos.catastrophic.io/header-flood?n=20")
chaos = [k for k in resp.headers if k.lower().startswith("x-chaos-header-")]
print(f"Got {len(chaos)} chaos headers")
const res = await fetch("https://chaos.catastrophic.io/header-flood?n=20");
let count = 0;
for (const [name] of res.headers) {
if (name.toLowerCase().startsWith("x-chaos-header-")) count++;
}
console.log(`Got ${count} chaos headers`);
package main
import (
"fmt"
"net/http"
"strings"
)
func main() {
resp, _ := http.Get("https://chaos.catastrophic.io/header-flood?n=20")
defer resp.Body.Close()
count := 0
for k := range resp.Header {
if strings.HasPrefix(strings.ToLower(k), "x-chaos-header-") {
count++
}
}
fmt.Printf("Got %d chaos headers\n", count)
}
// Cargo.toml: reqwest = { version = "0.12", features = ["blocking"] }
fn main() -> Result<(), Box> {
let resp = reqwest::blocking::get("https://chaos.catastrophic.io/header-flood?n=20")?;
let count = resp
.headers()
.keys()
.filter(|k| k.as_str().starts_with("x-chaos-header-"))
.count();
println!("Got {count} chaos headers");
Ok(())
}
import java.net.URI;
import java.net.http.*;
public class HeaderFlood {
public static void main(String[] args) throws Exception {
var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder(URI.create("https://chaos.catastrophic.io/header-flood?n=20")).build();
var resp = client.send(req, HttpResponse.BodyHandlers.discarding());
long count = resp.headers().map().keySet().stream()
.filter(k -> k.toLowerCase().startsWith("x-chaos-header-"))
.count();
System.out.println("Got " + count + " chaos headers");
}
}
using var client = new HttpClient();
var resp = await client.GetAsync("https://chaos.catastrophic.io/header-flood?n=20");
var count = resp.Headers.Count(h =>
h.Key.StartsWith("X-Chaos-Header-", StringComparison.OrdinalIgnoreCase));
Console.WriteLine($"Got {count} chaos headers");
require "net/http"
res = Net::HTTP.get_response(URI("https://chaos.catastrophic.io/header-flood?n=20"))
count = res.each_header.count { |k, _| k.downcase.start_with?("x-chaos-header-") }
puts "Got #{count} chaos headers"
$r = Invoke-WebRequest -Uri 'https://chaos.catastrophic.io/header-flood?n=20'
($r.Headers.Keys | Where-Object { $_ -like 'X-Chaos-Header-*' }).Count
headers
body