lawa
lawa is my web crawler. It crawls the web and writes down the HTTP headers that come back from each site. Everything below is regenerated every few minutes from what it has seen so far.
Status
| lawa is | crawling |
| pace | 2,694 requests in the last minute |
| servers visited | 280,943 finished, 1,217 in progress |
| servers waiting in line | 1,691,003 |
| responses studied below | 4,081,057 from 277,889 servers |
| numbers as of | 2026-09-21 07:00 UTC |
The shares below are measured by hostname. Additionally, lawa takes at most 25 pages from any one server, and each server is counted once, when lawa has finished with it.
Web servers seen
| Server header | servers | share | |
| cloudflare | 78,735 | 28.3% | ββββββββββββββββ |
| nginx | 45,593 | 16.4% | βββββββββ |
| apache | 43,479 | 15.6% | βββββββββ |
| (none) | 26,983 | 9.7% | βββββ |
| github.com | 14,629 | 5.3% | βββ |
| vercel | 6,646 | 2.4% | β |
| litespeed | 6,080 | 2.2% | β |
| squarespace | 5,373 | 1.9% | β |
| netlify | 4,862 | 1.7% | β |
| gse | 4,647 | 1.7% | β |
12.9% of the servers that name themselves also announce their version number.
| X-Powered-By | servers | share of those sending it | |
| php 8 | 7,471 | 27.5% | ββββββββββββββββ |
| next.js | 4,106 | 15.1% | βββββββββ |
| asp.net | 2,832 | 10.4% | ββββββ |
| php 7 | 2,668 | 9.8% | ββββββ |
| express | 2,356 | 8.7% | βββββ |
| php 5 | 1,221 | 4.5% | βββ |
| wp engine | 1,208 | 4.5% | βββ |
| plesklin | 799 | 2.9% | ββ |
Bad time
A Date only has oneβsecond resolution and the network adds delay, so βon timeβ means βwithin about 2Β secondsβ.
| server clock | servers | share | |
| on time | 235,667 | 98.4% | ββββββββββββββββ |
| up to 10Β seconds off | 1,089 | 0.5% | |
| 10Β seconds to a minute | 933 | 0.4% | |
| a minute to an hour | 1,473 | 0.6% | |
| an hour to a day | 199 | 0.1% | |
| more than a day | 76 | 0.0% | |
Of the 3,770 wrong clocks, 2,551 run slow and 1,219 run fast. 44 are wrong by a whole number of hours, which is likely timezone problems rather than drift. 2,224 servers sent no Date at all, and 109 sent malformed Dates.
Responses served from a cache (indicated by an Age header) are left out. 36,119 servers only ever answered that way.
Security headers
| header | servers | share | |
| HSTS (share of HTTPS servers) | 105,630 | 44.1% | ββββββββββββββββ |
| X-Content-Type-Options | 116,100 | 41.8% | βββββββββββββββ |
| X-Frame-Options | 88,737 | 31.9% | ββββββββββββ |
| Content-Security-Policy | 65,504 | 23.6% | βββββββββ |
| Referrer-Policy | 61,821 | 22.2% | ββββββββ |
| Permissions-Policy | 29,235 | 10.5% | ββββ |
| X-XSS-Protection (deprecated) | 50,617 | 18.2% | βββββββ |
TLS
86.2% of servers answered over HTTPS at least once. lawa connects even when the certificate is bad, so hereβs what was wrong. 1.5% of HTTPS servers would have failed in a browser.
| certificate problem | servers | share of HTTPS | |
| wrong hostname | 1,837 | 0.8% | ββββββββββββββββ |
| unknown or incomplete issuer | 983 | 0.4% | βββββββββ |
| expired | 809 | 0.3% | βββββββ |
| selfβsigned | 294 | 0.1% | βββ |
| protocol | servers | share of HTTPS | |
| TLSv1.3 | 223,730 | 93.4% | ββββββββββββββββ |
| TLSv1.2 | 15,903 | 6.6% | β |
| certificate authority | servers | share of HTTPS | |
| Let's Encrypt | 126,267 | 52.7% | ββββββββββββββββ |
| Google Trust Services | 64,782 | 27.0% | ββββββββ |
| Amazon | 13,164 | 5.5% | ββ |
| DigiCert Inc | 10,674 | 4.5% | β |
| Sectigo Limited | 7,703 | 3.2% | β |
| GlobalSign nv-sa | 3,641 | 1.5% | |
| GoDaddy.com | 1,919 | 0.8% | |
| Hellenic Academic and Research | 1,453 | 0.6% | |
Other quirks
lawa speaks my handrolled HTTP/1.1 implementation and logs each header block as the raw bytes, so we can see some stuff that HTTP libraries usually clean up.
| quirk | servers | share | |
| same header sent more than once | 56,980 | 20.5% | ββββββββββββββββ |
| every header name in lowercase | 11,887 | 4.3% | βββ |
| answered HTTP/1.1 with HTTP/1.0 | 2,415 | 0.9% | β |
| bare LF line endings (no CR) | 48 | 0.0% | |
| folded (multiβline) header values | 24 | 0.0% | |
The average response carried 15.9 header lines in 890Β bytes. In total, lawa has read 3.63Β GB of headers.
Status codes
| status | responses | share | |
| 200 | 3,084,901 | 82.9% | ββββββββββββββββ |
| 301 | 356,002 | 9.6% | ββ |
| 302 | 88,532 | 2.4% | |
| 404 | 76,953 | 2.1% | |
| 403 | 46,384 | 1.2% | |
| 308 | 28,978 | 0.8% | |
| 307 | 16,132 | 0.4% | |
| 401 | 4,322 | 0.1% | |
210 responses were 418 I'm a teapot, and 43 were 451 Unavailable For Legal Reasons. lawa asked for 523,392 robots.txt files and, because of what they said, left 114,078 pages alone. it walked away from 6,374 servers entirely because of 429, 503, or repeated 403s, and 15,056 linkedβto servers turned out not to exist any more.
Where the W3 is from
| network | servers | share | |
| Cloudflare, Inc. | 69,413 | 25.0% | ββββββββββββββββ |
| Amazon.com, Inc. | 39,779 | 14.3% | βββββββββ |
| Fastly, Inc. | 20,817 | 7.5% | βββββ |
| Google LLC | 12,758 | 4.6% | βββ |
| Hetzner Online GmbH | 9,739 | 3.5% | ββ |
| Cloudflare London, LLC | 7,784 | 2.8% | ββ |
| OVH SAS | 5,480 | 2.0% | β |
| Squarespace, Inc. | 5,368 | 1.9% | β |
| Akamai Technologies, Inc. | 4,917 | 1.8% | β |
| DigitalOcean, LLC | 4,685 | 1.7% | β |
| country | servers | share | |
| United States | 99,783 | 55.5% | ββββββββββββββββ |
| Germany | 21,552 | 12.0% | βββ |
| France | 7,359 | 4.1% | β |
| Canada | 7,310 | 4.1% | β |
| United Kingdom | 6,056 | 3.4% | β |
| The Netherlands | 5,597 | 3.1% | β |
| Japan | 3,549 | 2.0% | β |
| Switzerland | 2,482 | 1.4% | |
| Finland | 2,340 | 1.3% | |
| Russia | 1,596 | 0.9% | |
Countries leaves out the 98,014 servers behind Cloudflare and Fastly, because an anycast address is in every country at once. IP geolocation by DB-IP.
| topβlevel domain | servers | share | |
| .com | 120,413 | 43.3% | ββββββββββββββββ |
| .org | 36,194 | 13.0% | βββββ |
| .io | 13,966 | 5.0% | ββ |
| .net | 12,373 | 4.5% | ββ |
| .de | 9,783 | 3.5% | β |
| .uk | 5,693 | 2.0% | β |
| .dev | 3,388 | 1.2% | |
| .fr | 3,363 | 1.2% | |
| .jp | 3,283 | 1.2% | |
| .ca | 2,937 | 1.1% | |
Nonβstandard headers
| header | servers | share | |
| cf-ray | 79,095 | 28.5% | ββββββββββββββββ |
| cf-cache-status | 55,021 | 19.8% | βββββββββββ |
| x-cache | 42,649 | 15.3% | βββββββββ |
| x-served-by | 26,223 | 9.4% | βββββ |
| x-cache-hits | 23,035 | 8.3% | βββββ |
| x-timer | 22,415 | 8.1% | βββββ |
| x-proxy-cache | 17,267 | 6.2% | βββ |
| x-github-edge-region | 16,412 | 5.9% | βββ |
| x-github-request-id | 16,412 | 5.9% | βββ |
| x-fastly-request-id | 16,013 | 5.8% | βββ |
| x-request-id | 12,962 | 4.7% | βββ |
| x-amz-cf-pop | 11,227 | 4.0% | ββ |
And of course, X-Clacks-Overhead. 1,437 servers send it:
| X-Clacks-Overhead | servers | share | |
| GNU Terry Pratchett | 1,170 | 81.4% | ββββββββββββββββ |
| GNU Natalie Nguyen | 124 | 8.6% | ββ |
| GNU Lynn Conway, Kathryn Jeannette Wilso | 11 | 0.8% | |
| Terry Pratchett, Noirin Trouble Pluincei | 9 | 0.6% | |
| GNU Terry Pratchett, Zac Blaine Montgome | 6 | 0.4% | |
record holders
| record | value | server |
| slowest clock | 44.8Β years behind | pdp2011.sytse.net |
| fastest clock | 160Β days ahead | zinascii.com |
| oldest Last-Modified | 1991-10-18 | code.jquery.com |
| biggest header block | 42,345Β bytes | www.homevideostudio.com |
| most header lines | 225 | academyit.ru |
| most cookies in one response | 210 | academyit.ru |
| farthest from this site | 33 links away | markojs-tutorial.netlify.app |
2,106 pages claimed implausibly old Last-Modified (before the W3 existed, mostly 1970 (epoch fail!)) and 758 claimed one from the future; neither counts.
Details
lawa obeys robots.txt (its name there is βlawaβ), waits at least ten seconds between requests to the same server, and takes at most 25 pages from any one. If it is bothering you, a robots.txt rule is honored within a day, and I read my email robin@dreamstation.systems regularly.
Figures cover 2026-09-20 05:43 UTC to 2026-09-21 05:51 UTC (26 data segments); the crawl is constantly running, and the newest ~45Β minutes are not in yet.