I can open my site, SpotGoldValue, normally in Chrome, Firefox, and Safari, but any command-line HTTP client gets a 403 Forbidden. This is breaking a local script I use to health-check the site and fetch a JSON endpoint.
Reproduce:
curl -I https://spotgoldvalue.com/
returns HTTP/2 403, while the same URL in a browser returns 200 and renders fine.
What I’ve already tried:
-
Spoofing a real browser User-Agent:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Safari/537.36" -I https://spotgoldvalue.com/— still 403. -
Adding
-H "Accept: text/html"and aRefererheader — still 403. -
wgetwith the same headers — also 403. -
curl -vshows the TLS handshake completing fine, so it’s not a certificate problem; the 403 comes back from the server/edge after the request is sent.
So something at the edge is fingerprinting the request as non-browser (I suspect a WAF or bot-protection rule looking at the TLS/JA3 fingerprint or missing browser headers like Sec-Fetch-*, rather than just the User-Agent string).
My questions:
-
What’s the right way, from my own machine, to figure out which layer is returning the 403 (origin vs CDN/WAF)? Which response headers or
curl -voutput should I be reading to tell them apart? -
Is there a reliable way to make
curlpresent a request that passes browser-only bot checks (for example the fullSec-Fetch-*set,Accept-Language, HTTP/2 with browser-like header order), or is TLS fingerprinting something curl fundamentally can’t get past? -
Since it’s my own site, is the cleaner fix to allowlist my own IP or a custom header at the edge so my health-check script is exempt?