Large uploads through proxies with Expect 100-continue
Test whether a server can reject a request before a large body is sent, and measure the 100 Continue wait separately.

Test whether a server can reject a request before a large body is sent, and measure the 100 Continue wait separately. This original WorldProxy guide cross-checks five standards and official sources, ties each conclusion to an observable stage, and uses only owned or explicitly authorized systems.
Core idea
Expect: 100-continue lets a server inspect headers and send a final rejection before the body. The client still uses a wait timer and may begin sending if no interim response arrives, so the mechanism cannot guarantee zero upload traffic.
For Large uploads through proxies with Expect 100-continue, separate the protocol specification from product features. A standard defines message formats and required behavior; a service separately defines geography, rotation, duration, and supported commands. This explains why clients accept different connection formats or omit an optional protocol capability.
What the primary source establishes
Test whether a server can reject a request before a large body is sent, and measure the 100 Continue wait separately.
The primary source, RFC 9110 — Expect, RFC 9112 — HTTP/1.1, MDN Expect, curl manual, NGINX proxy module, defines the technical baseline but not every client and provider configuration. Read the normative behavior with its version and then verify your implementation. Treat anything beyond the source as a product feature that needs separate confirmation.
Controlled lab
Send an 8 MiB synthetic file to four controlled routes with and without Expect while tracing client writes and origin-received bytes. Add a proxy timeout below the interim delay. The negative control must identify who started the body and how many bytes crossed each boundary.
Step-by-step verification
Create owned upload routes for acceptance, 401, 413, and a delayed interim response. Use a synthetic file and rate limit to observe the body start. Compare direct and proxy paths without inflating the test transfer.
Build a capability matrix for address syntax, TCP or UDP, DNS location, authentication, and IPv6. Fill it from client and service documentation. Test one capability at a time on an endpoint you control, starting with basic TCP before DNS, TLS, and the application flow.
Record whether failure occurred during address parsing, authentication choice, tunnel creation, TLS, or the origin response. SOCKS errors, HTTP CONNECT rejection, and an origin 403 need different remedies even though all can look like an unopened page.
- Prepare four outcomes
- Measure body bytes sent
- Compare Expect and normal POST
- Test an intermediary timeout
Evidence to retain
Record request ID, Expect, Content-Length, interim and final statuses, timestamps, client sent bytes, origin received bytes, and proxy error category. Exclude payload and authorization.
Capture the protocol version, client command, masked destination, intermediary code, and origin code. State who resolved DNS. Packet captures belong only on an isolated test setup and should omit payload; a sanitized verbose client log is usually sufficient.
Define report columns and time format before the run. A result without context becomes a guess: the address, cache state, and changed condition are unknown. Record controlled failures as well as successes so the check proves that it can distinguish states.
Interpreting the result
Keep time to 100, time to the final first byte, actual body bytes, and final status separate. If the proxy generated the error, the origin should not record the complete upload.
HTTP/2 and HTTP/3 frame requests differently, and libraries use distinct thresholds and timers. Curl behavior cannot be generalized to browsers.
One successful run confirms only one client, route, and moment. Repeat while changing one variable and state the limits. When observation conflicts with documentation, rule out cache, client version, and intermediaries before creating a reproducible support case.
Worked decision process
For Large uploads through proxies with Expect 100-continue, use a matrix with capability, specification, proxy service, client, and verified behavior. Remote DNS or UDP may exist in a standard yet be unavailable in one library. Only the intersection is a supported workflow.
Capture the smallest useful trace: intermediary address, command, masked destination, intermediary result, TLS state, origin result, and DNS resolver. This separates syntax, policy, network, and origin failures without retaining payload or credentials.
Verify a second client version, one alternative address form, and a controlled failure. Publish version and platform limits beside connection examples. One successful implementation is not evidence for every client.
Common mistakes
Do not equate SOCKS5 with encryption, expect UDP from every client, omit brackets around IPv6 plus port, or treat HTTP/2 as a speed guarantee. Verify the implementation: a standardized command may be intentionally unsupported by the product or library.
Stop when errors rise, a source returns a limit, the task would require bypassing protection, or secrets enter logs. Save sanitized diagnostics and correct the cause first. More concurrency or another IP can hide the fault and add load without improving evidence.
Rollout and maintenance criteria
Define the decision boundary before rollout: which observation permits continuation, which requires review, and which stops the workflow. Record acceptable error ratio, maximum wait, and the owner of every exception so a temporary failure cannot silently become permanent configuration.
Review real load, cost, and quality after the first week. Schedule a small control after client, proxy-service, or network changes. Archive outdated instructions with their replacement date and reason so operators do not follow conflicting configurations.
Operational checklist
Turn the successful experiment into a short procedure covering owner, safe configuration, limits, and stop conditions. Every run needs a terminal status. After browser, library, or network changes, run a small control before the main queue.
- Protocol version is named
- Client capabilities are verified
- DNS path is explicit
- Proxy and origin codes differ
- The first test is minimal
- Unsupported features are not promised
Sources
This WorldProxy article is original. Links point to the primary documents used for fact checking.
Choose a proxy for your workflow
Compare proxy families and browse all countries. Availability and price are checked before an item enters the cart.