403 Forbidden through a proxy: find out who refused
Most 403s seen through a proxy come from the website: the tunnel opened, the site read the request and declined it. A 403 that arrives as the answer to CONNECT, before any TLS, comes from the proxy, which refused the destination. curl -v shows which: look for 200 Connection established before the 403.
Reviewed by John Hale. Last updated .
What it looks like
> CONNECT example.com:443 HTTP/1.1
< HTTP/1.1 200 Connection established
...
> GET /account HTTP/2
< HTTP/2 403
< content-type: text/html> CONNECT 192.168.1.10:443 HTTP/1.1
< HTTP/1.1 403 Forbidden
* CONNECT tunnel failed, response 403
curl: (56) CONNECT tunnel failed, response 403What does 403 Forbidden mean through a proxy?
403 means the server understood the request and refuses to fulfil it (RFC 9110, section 15.5.4). Unlike 401, signing in is not expected to help, and sending the same request again gets the same answer.
Through a proxy, two different servers can send it. For an HTTPS URL your client first asks the proxy to open a tunnel with CONNECT. A 403 in reply to CONNECT is the proxy refusing that destination. Once the proxy has replied 200, everything after it comes from the website, and the proxy can neither read nor change it.
A plain http:// URL has no tunnel: the proxy forwards the request and passes the site's response back, so read the response body and headers to tell the two apart.
What causes a 403 through a proxy?
Most likely first.
- The website refused this request. Sites refuse requests that do not look like their usual visitors: missing or inconsistent headers, no cookies, an unusual TLS client, or a page that needs a signed-in session. This is the most common source of a 403 through a working proxy.
- The website refuses the exit's network. Many sites score addresses by network type and history. Datacenter ranges and addresses with recent abuse reports are refused more often than residential ones, and some sites refuse every range they know belongs to a proxy or VPN.
- The exit is in a country the site does not serve. Streaming, banking, betting and some retail sites answer 403 to countries outside their market. Check where the exit actually is; IP databases often disagree about cities.
- The proxy refused the destination. Providers refuse private and reserved addresses such as
127.0.0.1,10.0.0.0/8and192.168.0.0/16, keep their own blocked lists, and sometimes refuse ports. This 403 replaces the tunnel. - Another proxy in between. Office and school proxies answer 403 for blocked categories, and some providers send 403 instead of 407 to an address that is not on their IP whitelist.
How do you tell who sent the 403?
See which side answered
If no
200 Connection establishedline appears before the 403, the proxy refused. A 200 followed byHTTP/2 403means the website did.Proxy's answer, then the site'scurl -v -x http://HOST:PORT -U "USER:PASS" https://TARGET/ -o /dev/null 2>&1 \ | grep -iE "^(> CONNECT|< HTTP|< x-proxy-reason|\* CONNECT)"Read the website's response
The headers and body often name what refused you: a challenge page, a firewall reference ID or a notice about your country.
Save the headers and bodycurl -s -D - -o 403-body.html -x http://HOST:PORT -U "USER:PASS" https://TARGET/ | head -20Compare without the proxy and with another exit
If the site answers 200 directly and 403 through every exit, it refuses the proxy network or the exit's country. If only some exits get a 403, it is scoring individual addresses.
Direct, through the proxy, and the exit's addresscurl -s -o /dev/null -w "direct: %{http_code}\n" https://TARGET/ curl -s -o /dev/null -w "proxy: %{http_code}\n" -x http://HOST:PORT -U "USER:PASS" https://TARGET/ curl -s -x http://HOST:PORT -U "USER:PASS" https://api.ipify.org; echoRepeat it in a real browser
A browser profile on the same proxy runs JavaScript and keeps cookies. If the browser loads the page and curl gets a 403, the site is refusing the shape of the request, not the address. The IP leak test inside that profile shows where the exit really is.
How do you fix a 403 through a proxy?
A 403 from the proxy
Check the hostname and port, use the site's public hostname instead of an internal address, and ask the provider whether the destination is on its blocked list.
A 403 from the website
Read the site's terms and robots.txt first: a different exit address does not make a refused request permitted. Where the access is allowed, send the headers a browser sends for that page, keep cookies across requests in one session, and request pages in the order a visitor would.
Match the exit to the site
Use an exit in a country the site serves, a sticky session when the site ties cookies to an IP, and residential exits where it refuses datacenter ranges. Slow down too: a 403 often follows a burst the site counted as abuse. If the site offers an API, use that.
If you use TrueProxies
A 403 in reply to CONNECT, with no reason, means the destination is a private or reserved address, such as 127.0.0.1 or 192.168.0.0/16, or one TrueProxies blocks. On SOCKS5 the same refusal is reply 0x02, connection not allowed by ruleset.
Every 403 inside an open tunnel is the website's answer. The gateway does not use 403 for logins or limits: those come back as 407 with a reason in X-Proxy-Reason.
Residential IPv4 Standard and Premium target by country, region, city and ASN, and Unlimited Bandwidth by country, city and ASN. Moving to an exit in the site's own country, or to a sticky session that keeps its cookies on one IP, changes the request the site sees; it does not change the site's rules. Under the acceptable use policy you are responsible for following the terms of every site you reach through the service.
Test the proxy from outside your network
The free proxy checker connects from our servers and reports the failed stage as a code, so you can tell a proxy problem from one on your computer or network.
Questions about 403 Forbidden through a proxy
Is a 403 through a proxy a ban on the IP?
Not necessarily. Headers, cookies, request rate, path, country and the address's network type all feed a 403. Compare the same request from another exit and from a browser before concluding the address is refused.
Why do I get 403 through the proxy but 200 without it?
The site treats your own connection and the exit differently: by network type, country, history, or the other traffic it has seen from that address. Try an exit in your own country and a browser on the same proxy to narrow it down.
Why does the proxy return 403 for localhost or an internal IP?
Public proxies refuse private and reserved destinations so they cannot be used to reach their own internal networks. Use the target's public hostname.
Will rotating IPs fix a 403?
Only if the site refuses particular addresses. If it refuses the request's shape or the whole network type, every new exit gets the same answer.
Related errors
429 Too Many Requests through a proxy
A rate limit, almost always the website's. Find what it counts, then send fewer requests.
407 Proxy Authentication Required
The proxy wants credentials it did not get or did not accept. The website never saw the request.
ERR_TUNNEL_CONNECTION_FAILED
The proxy answered the browser's CONNECT with an error. The status it sent is the real cause.
The proxy checker error codes page maps each checker code to the stage that failed, and proxy errors explained covers timeouts and slow connections.