ScrapingTools & Platforms

Proxy-Status Header Explained: Meaning, Syntax, and Use Cases

Learn what the HTTP Proxy-Status response header is, how to interpret its values, and how to use it for proxy/CDN debugging and logging.

Ibuki Yamamoto
Ibuki Yamamoto
April 3, 2026 3min read

Proxy-Status Header Explained: Meaning, Syntax, and Use Cases

Proxy-Status is an HTTP response header that helps you understand what happened inside an intermediary like a CDN, reverse proxy, gateway, or corporate proxy. If a request “just feels slow,” fails mid-stream, or returns a generic 5xx, Proxy-Status can add the missing context you need to pinpoint whether the problem occurred at the origin or somewhere in the proxy layer.

This guide breaks down what Proxy-Status means, how to read typical values, where it fits in debugging and performance analysis, and what to watch out for when you roll it out.

What You’ll Learn
  • What the Proxy-Status header is and how it’s defined in standards
  • How to interpret values and use them in logs and incident investigations
  • Key deployment cautions and how it differs from related headers

What is Proxy-Status?

Proxy-Status is an HTTP response header that lets an intermediary (a proxy, gateway, or CDN) report how it handled the response back to the client. In practice, it can describe events like “served from cache,” “upstream connection dropped,” or “DNS lookup failed,” making it easier for clients and operators to isolate the real failure point.

Key takeaway: Proxy-Status describes what happened at the proxy/intermediary—not the health or state of your origin server.

The header is standardized by the IETF.


Why use it?

Proxy-Status is mainly useful for incident troubleshooting and performance analysis. Even when a client only sees “it’s slow” or “it disconnected,” Proxy-Status can reveal what happened at a hop in the middle.

Faster root cause isolation

  • Did a corporate proxy fail authentication or upstream connectivity?
  • Could the CDN not reach the origin?
  • Did a proxy terminate a streaming response mid-flight?

Stronger operational logs

Because the signal arrives as a response header, you can record it in client-side logs (browser apps, mobile apps, crawlers, API clients). That makes post-incident analysis much easier—especially for issues that don’t reproduce on demand.

Header format

Proxy-Status is made of one or more entries, each representing an intermediary, plus a set of parameters describing what happened. The exact parameters you’ll see depend on the product and configuration, but the core reading strategy stays the same: which proxy reported the status, and what did it say happened?

Note: RFC 9209 defines the overall framework and some standardized parameters (like error), but real-world output varies by CDN/proxy vendor and by deployment. Always cross-check with your proxy/CDN documentation.

Examples

These are simplified examples to make the format easier to recognize.

HTTP/1.1 200 OK
Proxy-Status: edge-proxy; ok
Content-Type: application/json
HTTP/1.1 502 Bad Gateway
Proxy-Status: edge-proxy; error="dns_failure"
Content-Type: text/html

In the second example, the surface-level status is 502, but Proxy-Status suggests the proxy encountered a DNS resolution issue. (The precise error taxonomy and wording are implementation-dependent; RFC 9209 standardizes the concept and registers error types.)

RFC 9209 explains that if an intermediary’s status changes after it has already sent the response headers (for example, during streaming), it may attach Proxy-Status as a trailer field.


Practical usage examples

Check with curl

Start by confirming whether Proxy-Status appears in the response headers.

curl -sS -D - https://example.com/ -o /dev/null

Log it in your application

For API clients and crawlers, logging Proxy-Status alongside the HTTP status code makes network and proxy-layer failures much easier to diagnose later.

import requests

r = requests.get("https://example.com/api", timeout=10)
proxy_status = r.headers.get("Proxy-Status")
print("status=", r.status_code, "proxy_status=", proxy_status)

Use it for monitoring and alerts

You can alert on patterns like “a specific Proxy-Status error exceeds N occurrences.” Even when everything looks like “5xx,” Proxy-Status can separate likely causes (DNS vs connect vs timeout vs caching behavior), which speeds up triage and reduces guesswork.

How it differs from other headers

Several headers are “proxy-related,” but they serve different goals. Don’t treat them as interchangeable.

Header Direction Primary purpose How to think about trust
Proxy-Status Response Conveys the proxy’s handling result and/or errors Assumes the intermediary on-path adds it. Design your edge so off-path injection isn’t possible.
X-Forwarded-For Request Conveys forwarding info like client IP Clients can spoof it unless you enforce a trust boundary and sanitize/overwrite at the edge.
Via Request/Response Shows which intermediaries the message passed through Great for path visibility, but it’s not designed to express detailed failure reasons.


Deployment cautions

Watch for information disclosure

Proxy-Status can reveal operational details (failure modes, upstream dependencies, or hints about internal architecture). Decide what level of detail is acceptable to expose externally. It may be perfect for internal APIs, but too revealing for a public-facing website.

Plan for multi-proxy environments

In stacked architectures (CDN → WAF → load balancer → reverse proxy), decide which layers add Proxy-Status, whether multiple entries should appear, and whether downstream components preserve or overwrite upstream values. Align logging so you can tell which layer produced which Proxy-Status entry.

Handle trailers intentionally

With streaming or large responses, conditions can change after headers are sent. RFC 9209 allows sending Proxy-Status as a trailer in those situations. Verify whether your clients and logging pipeline can collect and store trailer fields if you depend on that visibility.


FAQ

Should clients add it to requests?

No. Proxy-Status is a response header. It’s not intended for clients to add to requests to create meaning. If you need the normative definition, refer to the RFC.

Can you see it in a browser?

Often yes—developer tools (for example, the Network tab) may show it as a response header. However, visibility can vary by environment (browser behavior, extensions, corporate proxies, and CORS/exposed-header settings).

Is it useful for web scraping?

It won’t directly “bypass blocks,” but it’s very useful when your scraper runs through proxies. It helps you determine whether failures came from the proxy layer or the target site. For example, even if you see the same 429/403 on the surface, a proxy-reported error can push you toward investigating proxy configuration, routing, DNS, or upstream connectivity rather than assuming the site blocked you.

Contact UsFeel free to reach out for scraping consultations and quotes
Get in Touch

Summary

Proxy-Status is an HTTP response header that lets intermediaries like proxies and CDNs report their own handling outcomes to clients. It’s a practical way to distinguish proxy-layer issues (DNS, connection failures, timeouts, mid-stream termination) that don’t show up clearly in HTTP status codes alone. If you implement it, be deliberate about information exposure, multi-layer behavior, and whether you need to collect trailer fields. Start by capturing Proxy-Status with curl and in application logs—then use it as a high-signal clue during incident response.

References


About the Author

Ibuki Yamamoto
Ibuki Yamamoto

Web scraping engineer with over 10 years of practical experience, having worked on numerous large-scale data collection projects. Specializes in Python and JavaScript, sharing practical scraping techniques in technical blogs.

Leave it to the
Data Collection Professionals

Our professional team with over 100 million data collection records annually solves all challenges including large-scale scraping and anti-bot measures.

100M+
Annual Data Collection
24/7
Uptime
High Quality
Data Quality