Skip to content
Bionic Uptime

A client's site says 403 Forbidden: what to do

Something answered, and the answer was no: the site's server, or a firewall or CDN in front of it, decided this request is not allowed. Here is the order we would work in.

1. What the code is telling you

A page with 500, 502 or 503 on it is a fault on the server or in front of it, not a refusal: see what to do about a server error. If nothing answers at all, see what to do when a site times out.

2. Is it refusing everyone, or just some visitors?

This matters more than anything else, because a 403 is often aimed at somebody. Ask from a terminal:

curl -sSL -o /dev/null -w "%{http_code}\n" https://example.com

On Windows, type curl.exe rather than curl, and use NUL instead of /dev/null. Then try the site on your phone with Wi-Fi turned off, and ask the client to try it too.

3. The usual causes

4. Check the fix

Run the command from step 2 again. It should print 200. If the cause was a bot filter and you only allowed particular services through it, curl may still get 403; check in a browser, and from the service you allowed. If you changed a firewall or plugin rule, check from your phone on mobile data as well, so you know the change applies to everyone and not only to you.

5. Tell the client what happened

They may have seen the error themselves. For example:

The website was refusing some visitors because a security setting was stricter than it should have been. I have corrected it and checked the site loads normally again.

6. Next time, hear about it first

For Bionic Uptime, a 403 is a failed check, like any 400 or 500 code; so are 401, 404 and 429. When both of our locations, on two different companies' networks, and a retry agree within 45 seconds, while both locations are known to be working, it is confirmed as an outage and each person on that website's alert list gets one email. It names the code. When all three got a 403, it says: "Both checking locations received HTTP 403." If Cloudflare marked all three as its challenge page, it says so: "Both checking locations received a Cloudflare bot check page (HTTP 403) instead of the website." It is still counted as down, because we cannot see whether people get past it, but you know to look at the bot settings rather than the server. A failure that has cleared by the retry does not send an outage email. See the exact outage email.

The way we are most often wrong about a 403: a security rule that refuses our checks and lets visitors through. If it refuses both of our addresses, you get an outage email while the site works for everyone else. If it refuses only one, the site shows Status uncertain after five minutes and you get one email saying our two locations disagree, then one more when both can see it again. Never an outage alert. Our two addresses and the User-Agent every check sends are on the page about our checks, so the rule can allow them. A page behind a browser password prompt answers 401 to us every time, so monitor a public page of that site instead. A page behind a sign-in form usually loads the form, which tells you nothing about the page behind it.

3 websites are free, forever, with no card. Looking after several client sites?

Monitor 3 websites free