The Shortest Accurate Definition#
A proxy server is an intermediary that receives a connection or request on one side and creates or relays a connection toward another system. The important word is intermediary: the proxy becomes a participant in the route, with its own address, policy, logs, failures, and trust boundary.
For a forward proxy, your browser, script, or operating policy chooses the intermediary. The destination normally receives a connection from the proxy's exit, not directly from your application. For a reverse proxy, the service operator places the intermediary in front of its origin servers. Visitors may never know which origin handled the request.
| Question | Forward proxy | Reverse proxy |
|---|---|---|
| Who deploys it? | The client, network administrator, or egress provider | The destination or application operator |
| What does it represent? | A client-side application or network making an outbound request | One or more origin services receiving inbound traffic |
| Common jobs | Controlled egress, allowlists, policy, caching, authorized regional QA | Load balancing, routing, TLS termination, caching, access control |
| What does the next hop see? | Usually the forward proxy's source address | Usually the reverse proxy's source address |
A proxy changes a route; it does not make the user anonymous, authorize access, or guarantee a location. Accounts, cookies, device state, TLS behavior, request history, and proxy-added fields can all remain observable. The useful question is therefore not “am I hidden?” but “who opens each connection, who resolves each name, and what can each participant observe?”
One packaging deserves separate treatment: a web proxy is a website that performs the forward-proxy role inside a browser tab, fetching pages for you and rewriting their links. It needs no client configuration, and it has different capabilities and failure modes than the protocol-level proxies traced below.
One Request Becomes Two Connection Contexts#
A direct HTTPS request is easy to picture: the client resolves a destination, opens a network connection, negotiates TLS, and sends the HTTP request. Add a proxy and there are at least two contexts to record: client to proxy and proxy to destination. They can use different source addresses, protocols, certificates, DNS resolvers, timeouts, and connection pools.
This distinction explains several otherwise confusing results. A proxy can authenticate the client successfully and still fail to resolve the destination. The proxy can reach the origin while the origin refuses the proxy's exit. A TLS error can occur while connecting securely to an HTTPS proxy, while negotiating TLS with the final destination through CONNECT, or while the proxy connects to an HTTPS backend. “The proxy failed” is not a diagnosis until the failing segment is named.
Draw two arrows before debugging: client → proxy, then proxy → destination. Put DNS, TLS, authentication, and timeout ownership on the arrow where each operation happens.
The interactive explorer above models five common paths. It is deliberately a model rather than a live test: clients can override defaults, managed inspection can terminate TLS, and multi-hop services can contain more than one internal intermediary.
HTTP Forwarding Sends a Different Request Target#
For an ordinary HTTP request sent directly to an origin, an HTTP/1.1 client normally sends the path and query as the request target. When sending the request to an HTTP proxy, RFC 9112 requires absolute-form: the target includes the scheme and authority so the proxy knows where to forward it.
# Direct to the origin
GET /status?region=eu HTTP/1.1
Host: example.com
# Sent to an HTTP forward proxy
GET http://example.com/status?region=eu HTTP/1.1
Host: example.comThe proxy can read the HTTP method, target, headers, and body because it is processing a plain HTTP message. It can enforce policy, cache eligible responses, add or remove fields, select an upstream connection, or generate its own response. It also normally resolves the destination hostname found in the absolute URI. This is different from resolving the proxy's own hostname, which the client still has to do before it can connect to the proxy.
RFC 7239's optional Forwarded field can carry for, by, host, and proto information that proxying would otherwise lose. It is not a trustworthy client identity by itself: any untrusted participant can send or alter the field. A service should discard client-supplied forwarding fields at its trust boundary and accept only values written by an explicitly trusted proxy tier.
HTTPS Through CONNECT Has a Setup Phase and a TLS Phase#
An HTTPS URL cannot be forwarded like plain HTTP without exposing the encrypted request to the proxy. Instead, a client commonly asks an HTTP proxy to open a byte tunnel using CONNECT.
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: [credential sent to the proxy only]
HTTP/1.1 200 Connection Established
[the client now starts a TLS handshake with example.com through the tunnel]The exchange has two phases. First, the client connects to and authenticates with the proxy; the proxy evaluates example.com:443, resolves it when necessary, and opens an outbound TCP connection. Second, after a successful 2xx response, the proxy switches to forwarding bytes in both directions. The client normally negotiates TLS with example.com, so HTTP paths, headers, and content remain encrypted from the client to the destination.
The proxy is not blind. It knows the client connection, requested authority, connection time, volume, and outcome. The destination sees the proxy-facing source address and its own TLS session with the client. Managed TLS inspection is a different architecture: an authorized enterprise intermediary terminates TLS and issues a substitute certificate trusted by managed devices. If the certificate issuer is unexpected, stop; do not disable certificate verification to make the error disappear.
SOCKS5 Makes DNS a Client Decision#
SOCKS5 is not HTTP. After method negotiation and any method-specific authentication, the client sends a command such as CONNECT with a destination port and one of three address types: IPv4, domain name, or IPv6. That small choice determines where destination-name resolution happens.
| Client sends | Who resolved the destination? | Practical consequence |
|---|---|---|
| IPv4 or IPv6 address | The client or a resolver available to it | The SOCKS server receives an address, not the original hostname in the destination field. |
| Domain-name address | The SOCKS server must resolve or otherwise route the name | The client's normal resolver need not receive that destination lookup. |
This is why a checkbox labelled “SOCKS5” is not enough to predict DNS behavior. In curl, for example, --socks5 resolves the destination locally, while --socks5-hostname or a socks5h:// proxy URL passes the hostname to the proxy.
# Local destination lookup before the SOCKS request
curl --socks5 proxy.example:1080 https://example.com/
# Send the domain name to the SOCKS5 server
curl --socks5-hostname proxy.example:1080 https://example.com/SOCKS5 defines CONNECT, BIND, and UDP ASSOCIATE, but software and providers may implement only a subset. The base protocol is a relay and authentication framework; it does not promise encrypted application content. Continue to use TLS for HTTPS and verify the actual client's DNS, IPv6, and UDP behavior.
A Reverse Proxy Represents the Service, Not the Visitor#
A reverse proxy sits on the destination side of the relationship. Public DNS may direct www.example.com to an edge or load balancer. That intermediary accepts the visitor connection, applies service policy, selects an origin, and creates a separate upstream connection. Common products can terminate TLS, cache responses, normalize requests, enforce access controls, or keep private origins off the public internet.
The origin therefore normally sees the reverse proxy as its network peer. If the application needs the original client signal, the operator must define a trusted channel such as a platform-specific connection property or a correctly managed Forwarded field. Reading the leftmost address from any user-supplied X-Forwarded-For value is unsafe: a client can create that header before it reaches the proxy.
Forward and reverse proxies can appear in the same route. A browser may use a corporate forward proxy to reach a CDN acting as the destination's reverse proxy, which then connects to an application gateway and origin. “The IP the server sees” depends on which server and which hop you mean.
What Changes, What Remains Visible#
A forward proxy normally changes the network source seen on the destination-facing connection. That single fact is useful for a controlled egress allowlist or an authorized regional test, but it is only one line in the destination's observation.
| Observer | Can normally observe | Does not learn automatically |
|---|---|---|
| Local network or ISP | A connection to the proxy, timing, volume, and often proxy DNS | HTTPS content carried through a correctly validated tunnel |
| Proxy operator | Client identity or address, authentication, target, timing, volume, and routing result | End-to-end TLS content unless it terminates or intercepts TLS |
| Destination | Proxy exit, TLS and HTTP behavior, headers, cookies, accounts, timing, and requested resources | The direct client address unless another trusted signal provides it |
| Application owner | Its own configuration, credentials, logs, retries, and client state | Whether every protocol followed the intended route without testing |
Header-based labels such as Elite, Anonymous, or Transparent describe the output of a particular check, often the presence of Via, Forwarded, or legacy forwarding fields. An “Elite” result does not prove that the connection is undetectable or safe. It says nothing conclusive about DNS, TLS, browser state, malware, logging, consent, or authorization. Use the separate anonymity-level guide to interpret those classifications without turning them into privacy guarantees.
Diagnose the Failing Hop Before Retrying#
Proxy failures are evidence about a stage of the route. Retrying with a different identity before locating that stage can hide a configuration defect and can cross a destination's access boundary.
| Signal | Likely owner to inspect first | Next check |
|---|---|---|
407 Proxy Authentication Required | Client-to-proxy authentication | Credential scope, encoding, selected auth method, and whether the client sent it to the proxy rather than the origin |
| SOCKS reply “connection not allowed by ruleset” | SOCKS policy | Permitted command, destination, address family, and account policy |
502 Bad Gateway | An intermediary or gateway | Destination DNS, TCP/TLS handshake, upstream protocol, and proxy-specific diagnostics |
504 Gateway Timeout | An intermediary waiting upstream | Which timeout fired, origin health, network path, and connection-pool saturation |
403, 429, or a challenge | Could be proxy policy or destination policy | Response headers, documented quota, authorization, and whether the response was generated by an intermediary |
RFC 9209 defines Proxy-Status so an intermediary can report errors such as dns_error, connection_timeout, or http_request_denied and distinguish its response from one received upstream. Not every proxy emits it, and detail can be intentionally limited for security. Preserve request IDs and timestamps, but never log proxy passwords, session tokens, or sensitive response bodies just to diagnose a route.
Run a Reproducible Route Verification#
This lab answers a narrow question: did this particular curl invocation use the expected network exit? It does not prove anonymity, safety, or permission. Use credentials from your own account, test only destinations you are authorized to reach, and stop when a destination returns an access-control or quota signal.
# 1. Record the direct baseline.
curl --fail --silent --show-error \
https://databay.com/what-is-my-ip/json
# 2. Keep the password out of the proxy URL and shell history.
PROXY_SERVER='http://gw.databay.co:8888'
PROXY_USER='YOUR_DOCUMENTED_USERNAME'
read -s PROXY_PASS
# 3. Record the HTTP/CONNECT route.
curl --fail --silent --show-error \
--proxy "$PROXY_SERVER" \
--proxy-user "$PROXY_USER:$PROXY_PASS" \
https://databay.com/what-is-my-ip/json
# 4. For a SOCKS5 service, make DNS ownership explicit.
curl --fail --silent --show-error \
--proxy 'socks5h://YOUR_SOCKS_HOST:1080' \
--proxy-user "$PROXY_USER:$PROXY_PASS" \
https://databay.com/what-is-my-ip/json
unset PROXY_PASSRun at least three times and record UTC time, curl version, proxy protocol, gateway, expected exit region, observed IP and IP family, HTTP status, total duration, and whether the result matched the design. Repeat separately for every application that matters; a curl result does not prove how a browser, mobile app, background updater, or UDP client routes.
If the direct and proxied observations are identical, check NO_PROXY, application-specific settings, unsupported proxy schemes, direct fallback, and whether you tested a cached response. If the route works but the region is unexpected, remember that IP geolocation is an estimate and databases disagree. Confirm the provider's live allocation and record the lookup source rather than claiming a physical location.
Choose a Proxy from the Requirement Outward#
A proxy is a good fit when the requirement is application-scoped and falsifiable: one test runner needs an allowlisted egress, an authorized monitor needs a repeatable network sample, or a permitted collection job needs separate budgets and sessions. A VPN is usually the better starting point when policy must cover several applications or reach a private network at the operating-system layer.
Before selecting a proxy, write down: the applications and protocols in scope; destinations and authorization; client-to-proxy transport; target DNS ownership; IPv4 and IPv6 policy; TCP and UDP requirements; proxy authentication and credential rotation; gateway and exit regions; connection reuse; timeout and retry budget; direct-fallback policy; logs and retention; incident owner; and a test that proves the expected exit.
Then evaluate the operator. Ask who owns the service, how network capacity is sourced, what consent model applies, which records exist, how long they remain, how access is controlled, and how compromised credentials and abuse reports are handled. Residential, datacenter, ISP, and mobile describe network origins; none makes automation human, lawful, anonymous, or guaranteed to be accepted.
If the goal is to bypass authentication, a paywall, CAPTCHA, block, quota, purchase limit, or platform enforcement, stop. A proxy changes the route, not the permission. Use an official API, licensed feed, delegated account tool, allowlist, support channel, or written authorization instead.



