device.alpagot.net · port 443 · the user agent, cross-examined

What your browser
admits to being.

Your client announces itself with a User-Agent string, and the edge runs that claim through a device database and a bot classifier. Here is the verdict on you.

YOUR CLIENT, CLASSIFIED
client address216.73.216.209
user agentMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
identified0
browser name
browser version
OS name
OS version
hardware type
mobile0
tablet0
smart TV0
TV player0
media player0
games console0
e-reader0
class: browser0
class: bot1
class: checker0
class: downloader0
class: feed reader0
class: filter0
class: masquerading0
class: spam0
legacy bot nameClaudeBot
display width-1
display height-1
display ppi-1
touchscreen0
bot analysis ran0
bot detected0
bot name
bot category
verified bot0
AI crawler0
AI fetcher0
search crawler0
security tool0
monitoring tool0
page preview0
content fetcher0

Read by VCL in a fraction of a millisecond at the CMH POP (cache-cmh1290088-CMH) and written straight into this HTML. No JavaScript collected anything.

WHAT THIS IS

Claims versus classification

The client.* rows above are Fastly’s device detection: the User-Agent parsed into browser, OS and hardware class, plus the client.class.* flags that spot bots, checkers, downloaders and clients masquerading as something they are not. Display values of -1 mean the database has no answer for that device.

BOT SIGNALS

The newer verdicts: fastly.bot.*

The bottom rows come from the fastly.bot.* family, which goes beyond string-matching the User-Agent: verified bot detection checks whether a claimed crawler really is who it says it is, and the category flags separate search engine crawlers from AI crawlers, AI fetchers, security scanners, monitoring tools and link-preview agents. Watch an AI assistant fetch this page and it lights up rather differently to your browser.

These variables populate when the service has Fastly Bot Management enabled; fastly.bot.analyzed tells you whether the verdict rows are live.

FOR MACHINES

Lie to it, see what happens

The plain-text version lives at /raw. The fun experiment is spoofing: claim to be a phone, or a search engine crawler, and watch which rows believe you and which do not.

# tell it you are an iPhone $ curl -s -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" https://device.alpagot.net/raw # claim to be Googlebot and fail the verification $ curl -s -A "Googlebot/2.1" https://device.alpagot.net/raw
NOT JUST FOR SHOW

The same variables drive edge logic

Everything on this page is a live VCL expression, evaluated on every request before your origin is ever involved. That means each value can conditionalise the request flow — route, block, redirect, rewrite, rate limit, or vary the cache on it. A taste, in this site’s dialect:

# vcl_recv - crawlers must prove who they claim to be if (fastly.bot.detected && !fastly.bot.category.is_verified) { error 403; } # vary the cache for mobile without touching origin logic if (client.platform.mobile) { set req.http.X-Device = "mobile"; }

The other half is insight: every variable here can be emitted through Fastly’s real-time log streaming from vcl_log — per-request, from every POP, with no JavaScript beacons or client-side analytics. Stream them into your warehouse and you know your audience’s device mix, browsers and bot traffic at whatever depth you like.

UNDER THE HOOD

One service, three hostnames, zero origins

geoip, tls and device are a single origin-less Fastly VCL service, routed by req.http.host. Every response is a synthetic response: the variables above are captured into request headers in vcl_recv (most are not available in vcl_error, where the page is assembled) and interpolated into the HTML at the POP nearest you. Values echoed from client-controlled input are HTML-escaped in VCL first.

The whole family works this way — see http.alpagot.net and h3.alpagot.net for the other experiments, and Fastly’s VCL variables reference for everything the edge can see.

WHO BUILT THIS

Richard Alpagot

Senior Cloud Engineer at Fastly, collector of small sites that explain themselves.