From ee521a1c889f4cde6905c5db117959917568be9b Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Fri, 10 Mar 2023 13:15:43 -0800 Subject: [PATCH] http: don't send 100-continue for short PUT requests This is already how curl is documented to behave in Everything curl, but in actuality only short POSTs skip this. This should knock 30 seconds off a full run of the test suite since the 100-continue timeout will no longer be hit. Closes #10740 --- docs/FAQ | 9 ++++----- lib/http.c | 11 ++++++++++- tests/data/test10 | 1 - tests/data/test1001 | 1 - tests/data/test1002 | 2 -- tests/data/test1030 | 2 -- tests/data/test1041 | 1 - tests/data/test1051 | 2 -- tests/data/test1055 | 1 - tests/data/test1071 | 1 - tests/data/test1075 | 2 -- tests/data/test1131 | 6 +++--- tests/data/test1285 | 1 - tests/data/test1524 | 1 - tests/data/test1525 | 1 - tests/data/test1526 | 1 - tests/data/test154 | 9 ++++----- tests/data/test155 | 9 ++++----- tests/data/test156 | 1 - tests/data/test1948 | 1 - tests/data/test2058 | 1 - tests/data/test2059 | 1 - tests/data/test2060 | 1 - tests/data/test208 | 1 - tests/data/test218 | 1 - tests/data/test281 | 1 - tests/data/test33 | 1 - tests/data/test357 | 25 +++++-------------------- tests/data/test364 | 1 - tests/data/test490 | 2 -- tests/data/test491 | 1 - tests/data/test492 | 4 ---- tests/data/test58 | 1 - tests/data/test88 | 1 - 34 files changed, 30 insertions(+), 75 deletions(-) diff --git a/docs/FAQ b/docs/FAQ index c8ba7feb3d..b96357cc1a 100644 --- a/docs/FAQ +++ b/docs/FAQ @@ -990,11 +990,10 @@ FAQ 4.16 My HTTP POST or PUT requests are slow - libcurl makes all POST and PUT requests (except for POST requests with a - tiny request body) use the "Expect: 100-continue" header. This header - allows the server to deny the operation early so that libcurl can bail out - before having to send any data. This is useful in authentication - cases and others. + libcurl makes all POST and PUT requests (except for requests with a small + request body) use the "Expect: 100-continue" header. This header allows the + server to deny the operation early so that libcurl can bail out before having + to send any data. This is useful in authentication cases and others. However, many servers do not implement the Expect: stuff properly and if the server does not respond (positively) within 1 second libcurl will continue diff --git a/lib/http.c b/lib/http.c index 299a499f00..faa486cc6f 100644 --- a/lib/http.c +++ b/lib/http.c @@ -2340,7 +2340,16 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn, return result; } - if(http->postsize) { + /* For really small puts we don't use Expect: headers at all, and for + the somewhat bigger ones we allow the app to disable it. Just make + sure that the expect100header is always set to the preferred value + here. */ + ptr = Curl_checkheaders(data, STRCONST("Expect")); + if(ptr) { + data->state.expect100header = + Curl_compareheader(ptr, STRCONST("Expect:"), STRCONST("100-continue")); + } + else if(http->postsize > EXPECT_100_THRESHOLD || http->postsize < 0) { result = expect100(data, conn, r); if(result) return result; diff --git a/tests/data/test10 b/tests/data/test10 index 5b5534b674..5dd9356cd4 100644 --- a/tests/data/test10 +++ b/tests/data/test10 @@ -49,7 +49,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 78 -Expect: 100-continue Weird file diff --git a/tests/data/test1001 b/tests/data/test1001 index df42f71343..738afb27f9 100644 --- a/tests/data/test1001 +++ b/tests/data/test1001 @@ -98,7 +98,6 @@ User-Agent: curl/%VERSION Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 -Expect: 100-continue st diff --git a/tests/data/test1002 b/tests/data/test1002 index ca58be6f4e..d929ae724c 100644 --- a/tests/data/test1002 +++ b/tests/data/test1002 @@ -97,7 +97,6 @@ User-Agent: curl/%VERSION Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 -Expect: 100-continue st GET http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload2 HTTP/1.1 @@ -116,7 +115,6 @@ User-Agent: curl/%VERSION Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 -Expect: 100-continue st diff --git a/tests/data/test1030 b/tests/data/test1030 index bd4e18f1a1..5824977023 100644 --- a/tests/data/test1030 +++ b/tests/data/test1030 @@ -85,7 +85,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line @@ -97,7 +96,6 @@ Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce= User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line diff --git a/tests/data/test1041 b/tests/data/test1041 index 5580b9589a..6c3c01cbcf 100644 --- a/tests/data/test1041 +++ b/tests/data/test1041 @@ -59,7 +59,6 @@ Content-Range: bytes 0-99/100 User-Agent: curl/%VERSION Accept: */* Content-Length: 100 -Expect: 100-continue 012345678 012345678 diff --git a/tests/data/test1051 b/tests/data/test1051 index 5a1cf34c6f..9c082067b0 100644 --- a/tests/data/test1051 +++ b/tests/data/test1051 @@ -85,7 +85,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 78 -Expect: 100-continue Weird file @@ -101,7 +100,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 78 -Expect: 100-continue Weird file diff --git a/tests/data/test1055 b/tests/data/test1055 index f6f37531f8..b27b35b81d 100644 --- a/tests/data/test1055 +++ b/tests/data/test1055 @@ -60,7 +60,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 78 -Expect: 100-continue Weird file diff --git a/tests/data/test1071 b/tests/data/test1071 index 6c6947227e..9eee479705 100644 --- a/tests/data/test1071 +++ b/tests/data/test1071 @@ -91,7 +91,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line diff --git a/tests/data/test1075 b/tests/data/test1075 index 2d111f2841..d55468138f 100644 --- a/tests/data/test1075 +++ b/tests/data/test1075 @@ -70,7 +70,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line @@ -82,7 +81,6 @@ Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M= User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line diff --git a/tests/data/test1131 b/tests/data/test1131 index 8ead289c56..685e80e894 100644 --- a/tests/data/test1131 +++ b/tests/data/test1131 @@ -51,7 +51,7 @@ http HTTP PUT expect 100-continue with a 400 --T log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 +-H "Expect: 100-continue" -T log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 @@ -79,15 +79,15 @@ PUT /%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* -Content-Length: 100 Expect: 100-continue +Content-Length: 100 PUT /%TESTNUMBER0001 HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* -Content-Length: 100 Expect: 100-continue +Content-Length: 100 diff --git a/tests/data/test1285 b/tests/data/test1285 index e5a38e071d..0a907b60ec 100644 --- a/tests/data/test1285 +++ b/tests/data/test1285 @@ -85,7 +85,6 @@ Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", u User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line diff --git a/tests/data/test1524 b/tests/data/test1524 index 39da646f59..65831ddc5d 100644 --- a/tests/data/test1524 +++ b/tests/data/test1524 @@ -61,7 +61,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 4 -Expect: 100-continue moo GET /blah/moo.html&testcase=/%TESTNUMBER0002 HTTP/1.1 diff --git a/tests/data/test1525 b/tests/data/test1525 index 34495b7e57..33f71c877c 100644 --- a/tests/data/test1525 +++ b/tests/data/test1525 @@ -71,7 +71,6 @@ Host: the.old.moo.%TESTNUMBER:%HTTPPORT Accept: */* User-Agent: Http Agent Content-Length: 13 -Expect: 100-continue Hello Cloud! diff --git a/tests/data/test1526 b/tests/data/test1526 index 39e8668e8b..4076124054 100644 --- a/tests/data/test1526 +++ b/tests/data/test1526 @@ -73,7 +73,6 @@ Host: the.old.moo.%TESTNUMBER:%HTTPPORT Accept: */* User-Agent: Http Agent Content-Length: 13 -Expect: 100-continue Hello Cloud! diff --git a/tests/data/test154 b/tests/data/test154 index c0f76514d7..0b180b90a9 100644 --- a/tests/data/test154 +++ b/tests/data/test154 @@ -10,9 +10,6 @@ HTTP Digest auth # Server-side - -auth_required - HTTP/1.1 401 Authorization Required swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 @@ -88,15 +85,17 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue +This is data we upload with PUT +a second line +line three +four is the number of lines PUT /%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/%TESTNUMBER", response="b71551e12d1c456e47d8388ecb2edeca" User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line diff --git a/tests/data/test155 b/tests/data/test155 index 2d916c9759..353edb9fa8 100644 --- a/tests/data/test155 +++ b/tests/data/test155 @@ -10,9 +10,6 @@ NTLM # Server-side - -auth_required - HTTP/1.1 401 NTLM Authorization Required swsclose Server: Apache/1.3.27 (Darwin) PHP/4.1.2 @@ -105,8 +102,11 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue +This is data we upload with PUT +a second line +line three +four is the number of lines PUT /%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA= @@ -120,7 +120,6 @@ Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAL User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line diff --git a/tests/data/test156 b/tests/data/test156 index 94bb3393f8..35de74d240 100644 --- a/tests/data/test156 +++ b/tests/data/test156 @@ -46,7 +46,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line diff --git a/tests/data/test1948 b/tests/data/test1948 index 639523d995..4c50b02acd 100644 --- a/tests/data/test1948 +++ b/tests/data/test1948 @@ -58,7 +58,6 @@ PUT /%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* Content-Length: 22 -Expect: 100-continue This is test PUT data POST /1948 HTTP/1.1 diff --git a/tests/data/test2058 b/tests/data/test2058 index c400f26307..ba4a53e844 100644 --- a/tests/data/test2058 +++ b/tests/data/test2058 @@ -98,7 +98,6 @@ User-Agent: curl/%VERSION Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 -Expect: 100-continue st diff --git a/tests/data/test2059 b/tests/data/test2059 index 3170c99a11..4776970d32 100644 --- a/tests/data/test2059 +++ b/tests/data/test2059 @@ -98,7 +98,6 @@ User-Agent: curl/%VERSION Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 -Expect: 100-continue st diff --git a/tests/data/test2060 b/tests/data/test2060 index 11dd155265..9a8057d514 100644 --- a/tests/data/test2060 +++ b/tests/data/test2060 @@ -98,7 +98,6 @@ User-Agent: curl/%VERSION Accept: */* Proxy-Connection: Keep-Alive Content-Length: 3 -Expect: 100-continue st diff --git a/tests/data/test208 b/tests/data/test208 index d081b5131f..a6c0eea492 100644 --- a/tests/data/test208 +++ b/tests/data/test208 @@ -58,7 +58,6 @@ User-Agent: curl/%VERSION Accept: */* Proxy-Connection: Keep-Alive Content-Length: 78 -Expect: 100-continue Weird file diff --git a/tests/data/test218 b/tests/data/test218 index dc71442e87..08ee8c6d45 100644 --- a/tests/data/test218 +++ b/tests/data/test218 @@ -45,7 +45,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Transfer-Encoding: chunked -Expect: 100-continue %if hyper 1E diff --git a/tests/data/test281 b/tests/data/test281 index 4210f7b8f0..f92b753af2 100644 --- a/tests/data/test281 +++ b/tests/data/test281 @@ -49,7 +49,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 38 -Expect: 100-continue Weird file diff --git a/tests/data/test33 b/tests/data/test33 index 1b9c898ef9..56024842cc 100644 --- a/tests/data/test33 +++ b/tests/data/test33 @@ -49,7 +49,6 @@ Content-Range: bytes 50-99/100 User-Agent: curl/%VERSION Accept: */* Content-Length: 50 -Expect: 100-continue 012345678 012345678 diff --git a/tests/data/test357 b/tests/data/test357 index 8ddcdc90d1..4c204f60ef 100644 --- a/tests/data/test357 +++ b/tests/data/test357 @@ -53,16 +53,9 @@ HTTP PUT with Expect: 100-continue and 417 response http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T log/test%TESTNUMBER.txt +# 1053700 x 'x', large enough to invoke the 100-continue behaviour -Weird - file - to - upload -for - testing -the - PUT - feature +%repeat[1053700 x x]% @@ -73,24 +66,16 @@ PUT /we/want/%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* -Content-Length: 78 +Content-Length: 1053701 Expect: 100-continue PUT /we/want/%TESTNUMBER HTTP/1.1 Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* -Content-Length: 78 +Content-Length: 1053701 -Weird - file - to - upload -for - testing -the - PUT - feature +%repeat[1053700 x x]% diff --git a/tests/data/test364 b/tests/data/test364 index 5afb8c96d8..a5c9265903 100644 --- a/tests/data/test364 +++ b/tests/data/test364 @@ -43,7 +43,6 @@ Host: %HOSTIP:%HTTPSPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 1201 -Expect: 100-continue %repeat[200 x banana]% diff --git a/tests/data/test490 b/tests/data/test490 index 2d4cf1604a..3fcd0f3d50 100644 --- a/tests/data/test490 +++ b/tests/data/test490 @@ -51,7 +51,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 10 -Expect: 100-continue surprise! PUT /%TESTNUMBER HTTP/1.1 @@ -59,7 +58,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 10 -Expect: 100-continue surprise! diff --git a/tests/data/test491 b/tests/data/test491 index 5f2c27d6a2..a2191ffe58 100644 --- a/tests/data/test491 +++ b/tests/data/test491 @@ -51,7 +51,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 10 -Expect: 100-continue surprise! diff --git a/tests/data/test492 b/tests/data/test492 index aedaf5b8a4..6c704000db 100644 --- a/tests/data/test492 +++ b/tests/data/test492 @@ -55,7 +55,6 @@ User-Agent: curl/%VERSION Accept: */* Testno: %TESTNUMBER Content-Length: 19 -Expect: 100-continue first %TESTNUMBER contents PUT /two/first%TESTNUMBER HTTP/1.1 @@ -64,7 +63,6 @@ User-Agent: curl/%VERSION Accept: */* Testno: %TESTNUMBER Content-Length: 19 -Expect: 100-continue first %TESTNUMBER contents PUT /one/second%TESTNUMBER HTTP/1.1 @@ -73,7 +71,6 @@ User-Agent: curl/%VERSION Accept: */* Testno: %TESTNUMBER Content-Length: 20 -Expect: 100-continue second %TESTNUMBER contents PUT /two/second%TESTNUMBER HTTP/1.1 @@ -82,7 +79,6 @@ User-Agent: curl/%VERSION Accept: */* Testno: %TESTNUMBER Content-Length: 20 -Expect: 100-continue second %TESTNUMBER contents diff --git a/tests/data/test58 b/tests/data/test58 index 75765b224f..9322ecca7b 100644 --- a/tests/data/test58 +++ b/tests/data/test58 @@ -41,7 +41,6 @@ Host: %HOSTIP:%HTTPPORT User-Agent: curl/%VERSION Accept: */* Content-Length: 12 -Expect: 100-continue a few bytes diff --git a/tests/data/test88 b/tests/data/test88 index b7c6207628..842031a858 100644 --- a/tests/data/test88 +++ b/tests/data/test88 @@ -88,7 +88,6 @@ Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145" User-Agent: curl/%VERSION Accept: */* Content-Length: 85 -Expect: 100-continue This is data we upload with PUT a second line -- 2.47.3