mirror of
https://github.com/curl/curl.git
synced 2026-08-25 02:33:31 +03:00
http: added options for allowing HTTP/0.9 responses
Added CURLOPT_HTTP09_ALLOWED and --http0.9 for this purpose. For now, both the tool and library allow HTTP/0.9 by default. docs/DEPRECATE.md lays out the plan for when to reverse that default: 6 months after the 7.64.0 release. The options are added already now so that applications/scripts can start using them already now. Fixes #2873 Closes #3383
This commit is contained in:
parent
db9776ea00
commit
006ff62d8c
36 changed files with 396 additions and 59 deletions
|
|
@ -3221,6 +3221,10 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
|
|||
k->header = FALSE;
|
||||
k->badheader = HEADER_ALLBAD;
|
||||
streamclose(conn, "bad HTTP: No end-of-message indicator");
|
||||
if(!data->set.http09_allowed) {
|
||||
failf(data, "Received HTTP/0.9 when not allowed\n");
|
||||
return CURLE_UNSUPPORTED_PROTOCOL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -3254,6 +3258,10 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
|
|||
if(st == STATUS_BAD) {
|
||||
streamclose(conn, "bad HTTP: No end-of-message indicator");
|
||||
/* this is not the beginning of a protocol first header line */
|
||||
if(!data->set.http09_allowed) {
|
||||
failf(data, "Received HTTP/0.9 when not allowed\n");
|
||||
return CURLE_UNSUPPORTED_PROTOCOL;
|
||||
}
|
||||
k->header = FALSE;
|
||||
if(*nread)
|
||||
/* since there's more, this is a partial bad header */
|
||||
|
|
|
|||
|
|
@ -860,6 +860,12 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option,
|
|||
data->set.expect_100_timeout = arg;
|
||||
break;
|
||||
|
||||
case CURLOPT_HTTP09_ALLOWED:
|
||||
arg = va_arg(param, unsigned long);
|
||||
if(arg > 1L)
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.http09_allowed = arg ? TRUE : FALSE;
|
||||
break;
|
||||
#endif /* CURL_DISABLE_HTTP */
|
||||
|
||||
case CURLOPT_HTTPAUTH:
|
||||
|
|
|
|||
|
|
@ -536,6 +536,7 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
|
|||
set->fnmatch = ZERO_NULL;
|
||||
set->upkeep_interval_ms = CURL_UPKEEP_INTERVAL_DEFAULT;
|
||||
set->maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */
|
||||
set->http09_allowed = TRUE;
|
||||
set->httpversion =
|
||||
#ifdef USE_NGHTTP2
|
||||
CURL_HTTP_VERSION_2TLS
|
||||
|
|
|
|||
|
|
@ -1743,6 +1743,7 @@ struct UserDefined {
|
|||
long upkeep_interval_ms; /* Time between calls for connection upkeep. */
|
||||
bool doh; /* DNS-over-HTTPS enabled */
|
||||
bool doh_get; /* use GET for DoH requests, instead of POST */
|
||||
bool http09_allowed; /* allow HTTP/0.9 responses */
|
||||
multidone_func fmultidone;
|
||||
struct Curl_easy *dohfor; /* this is a DoH request for that transfer */
|
||||
CURLU *uh; /* URL handle for the current parsed URL */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue