305 - Use Proxy
HTTP 305 Use Proxy is deprecated and should not be generated in modern HTTP systems.
Last reviewed: February 12, 2026|Editorial standard: source-backed technical guidance
What Does Use Proxy Mean?
A deprecated proxy directive leaked into runtime behavior, creating compatibility and security risks for modern clients.
Common Causes
- -Legacy middleware still emits deprecated proxy status.
- -Historical proxy configuration persists after migration.
- -Obsolete test behavior leaked into production routing.
How to Fix Use Proxy
- 1Identify and stop the component emitting 305, then replace it with supported proxy or redirect behavior.
- 2Remove legacy Use Proxy configuration from gateway, origin, and intermediary routing policies.
- 3Validate clients operate with modern proxy settings or 407 challenge flows instead of deprecated 305.
Step-by-Step Diagnosis for Use Proxy
- 1Capture the full request path and identify which hop emits deprecated 305.
- 2Audit gateway/reverse-proxy/middleware configs for stale Use Proxy response templates.
- 3Inspect client proxy bootstrap assumptions and remove logic that depends on obsolete status behavior.
- 4Retest path after config cleanup to confirm standards-compliant responses only.
Deprecated Proxy Behavior Source Audit
- -Trace status emission origin (example: legacy egress filter still returns 305 when proxy unavailable).
- -Inspect inherited config snippets from old platform templates (example: deprecated default error map bundled with migration artifact).
Modern Proxy Model Compatibility Checks
- -Verify supported alternatives (example: 407 challenge flow for authenticated proxy access).
- -Validate PAC/env proxy config handling in clients (example: runtime assumes server-driven 305 rather than explicit proxy config).
Implementation Examples
curl -i -X GET https://api.example.com/v1/resource
# Response:
# HTTP/1.1 305 Use Proxy
# {"error":"Use Proxy","code":"305"}const response = await fetch('https://api.example.com/v1/resource', {
method: 'GET',
headers: { 'Accept': 'application/json' }
});
if (response.status === 305) {
console.error('Handle 305 Use Proxy');
}import requests
response = requests.get(
'https://api.example.com/v1/resource',
headers={'Accept': 'application/json'}
)
if response.status_code == 305:
print('Handle 305 Use Proxy')How to Verify the Fix
- -Run endpoint smoke tests and confirm no 305 responses appear across browser, API, and service clients.
- -Verify expected statuses such as 200, 3xx, or 407 are returned according to the intended proxy model.
- -Review edge and application logs to confirm deprecated 305 emissions remain at zero over time.
How to Prevent Recurrence
- -Add linting and policy checks that fail builds when deprecated HTTP statuses like 305 are configured.
- -Keep proxy and gateway config under version control with mandatory review for status code behavior.
- -Run synthetic proxy-path tests after network or security changes to catch deprecated responses early.
Pro Tip
- -enforce a denylist of deprecated statuses at ingress so any accidental 305 emission is blocked and alerted immediately.
Decision Support
Compare Guide
403 Forbidden vs 404 Not Found: When to Hide Resources
Use 403 for explicit access denial, or 404 to conceal resource existence when security policy requires reducing endpoint and object enumeration risk.
Compare Guide
404 Not Found vs 410 Gone: Missing vs Permanent Removal
Learn when to return 404 (missing or temporary absence) versus 410 (intentional permanent removal), including redirect and cache implications.
Playbook
Resource State Playbook (404 / 410 / ResourceNotFound)
Use this playbook to separate temporary missing-resource lookups from permanent removals, then fix scope, lifecycle, and identifier drift safely.
Official References
Provider Context
This guidance is specific to HTTP services. Always validate implementation details against official provider documentation before deploying to production.