100 Continue: the interim response before an upload
100 Continue is an interim response telling the client its request headers were accepted and it can go ahead and send the request body.
100 Continue is an interim response. It tells a client that the server has read the request headers, hasn’t rejected them, and is ready for the request body. The real answer, a final status such as 201 Created, follows once the body has arrived.
What the standard says
RFC 9110, section 15.2.1 defines 100 as a sign “that the initial part of a request has been received and has not yet been rejected by the server.” It works together with the Expect: 100-continue request header: the client sends its headers, pauses, and only transmits a large body once the server says “go ahead.”
The point is to avoid wasted uploads. If the server already knows it will refuse the request (the file is too big, the credentials are missing), it can answer straight away with 413 Content Too Large or 401 Unauthorized, and the client never sends the 500 MB file. A server that can’t meet the expectation at all can reply 417 Expectation Failed.
Where you’ll meet it
- File uploads and large POST or PUT requests from command-line tools and SDKs. curl, for example, adds
Expect: 100-continueby itself for larger request bodies. - Object storage APIs, and the proxies that pass uploads through to them.
- Older proxies that don’t handle the expectation, which makes uploads stall briefly while the client waits before sending anyway.
SEO impact
None for normal crawling. Search engine crawlers fetch pages with GET requests that carry no body, so there is nothing to “continue.” Because 1xx codes are interim, what a crawler acts on is the final status that follows. Our HTTP header checker reports that final response too. If a tool ever shows 100 as the final result for a page, the server or a proxy is cutting the response short, so treat it like a server error.
Fixing upload delays
If uploads through a proxy hang for a second before starting, remove the expectation on the client side. In PHP’s cURL extension, an empty header drops it:
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Expect:']);
With the curl command line, add -H 'Expect:'. On the server side, make sure the application or the proxy in front of it either answers 100 promptly or rejects the request early.
Example exchange
PUT /uploads/video.mp4 HTTP/1.1
Host: storage.example.com
Content-Type: video/mp4
Content-Length: 524288000
Expect: 100-continue
HTTP/1.1 100 Continue
[client sends the 500 MB body]
HTTP/1.1 201 Created
Location: /uploads/video.mp4 Frequently asked questions
Is 100 Continue an error?
No. It’s an informational response that says the server accepted the request headers and is waiting for the body. A final status code, such as 200 or 201, always follows it.
Why does my upload tool wait before sending data?
It sent Expect: 100-continue and is waiting for the server’s go-ahead. If the server or a proxy never answers, curl waits about one second by default and then sends the body anyway. Removing the Expect header avoids the delay.
Does Googlebot ever receive 100 Continue?
Not in normal crawling. Googlebot requests pages with GET and sends no request body, so there is nothing to confirm. What matters for SEO is the final status code of the page.