1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-24 00:58:48 -05:00

alt-svc: send Alt-Used: in redirected requests

RFC 7838 section 5:

   When using an alternative service, clients SHOULD include an Alt-Used
   header field in all requests.

Removed CURLALTSVC_ALTUSED again (feature is still EXPERIMENTAL thus
this is deemed ok).

You can disable sending this header just like you disable any other HTTP
header in libcurl.

Closes #4199
This commit is contained in:
Daniel Stenberg 2019-08-07 20:43:18 +02:00
parent 026840e35c
commit 98c3f14871
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
5 changed files with 17 additions and 4 deletions

View File

@ -12,7 +12,6 @@
Name Introduced Deprecated Removed Name Introduced Deprecated Removed
CURLALTSVC_ALTUSED 7.64.1
CURLALTSVC_H1 7.64.1 CURLALTSVC_H1 7.64.1
CURLALTSVC_H2 7.64.1 CURLALTSVC_H2 7.64.1
CURLALTSVC_H3 7.64.1 CURLALTSVC_H3 7.64.1

View File

@ -883,7 +883,7 @@ typedef enum {
/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ /* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */
#define CURLALTSVC_IMMEDIATELY (1<<0) #define CURLALTSVC_IMMEDIATELY (1<<0)
#define CURLALTSVC_ALTUSED (1<<1)
#define CURLALTSVC_READONLYFILE (1<<2) #define CURLALTSVC_READONLYFILE (1<<2)
#define CURLALTSVC_H1 (1<<3) #define CURLALTSVC_H1 (1<<3)
#define CURLALTSVC_H2 (1<<4) #define CURLALTSVC_H2 (1<<4)

View File

@ -1998,6 +1998,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
const char *httpstring; const char *httpstring;
Curl_send_buffer *req_buffer; Curl_send_buffer *req_buffer;
curl_off_t postsize = 0; /* curl_off_t to handle large file sizes */ curl_off_t postsize = 0; /* curl_off_t to handle large file sizes */
char *altused = NULL;
/* Always consider the DO phase done after this function call, even if there /* Always consider the DO phase done after this function call, even if there
may be parts of the request that is not yet sent, since we can deal with may be parts of the request that is not yet sent, since we can deal with
@ -2592,6 +2593,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
if(result) if(result)
return result; return result;
#ifdef USE_ALTSVC
if(conn->bits.altused && !Curl_checkheaders(conn, "Alt-Used")) {
altused = aprintf("Alt-Used: %s:%d\r\n",
conn->conn_to_host.name, conn->conn_to_port);
if(!altused)
return CURLE_OUT_OF_MEMORY;
}
#endif
result = result =
Curl_add_bufferf(&req_buffer, Curl_add_bufferf(&req_buffer,
"%s" /* ftp typecode (;type=x) */ "%s" /* ftp typecode (;type=x) */
@ -2606,7 +2615,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
"%s" /* accept-encoding */ "%s" /* accept-encoding */
"%s" /* referer */ "%s" /* referer */
"%s" /* Proxy-Connection */ "%s" /* Proxy-Connection */
"%s",/* transfer-encoding */ "%s" /* transfer-encoding */
"%s",/* Alt-Used */
ftp_typecode, ftp_typecode,
httpstring, httpstring,
@ -2632,13 +2642,15 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
!conn->bits.tunnel_proxy && !conn->bits.tunnel_proxy &&
!Curl_checkProxyheaders(conn, "Proxy-Connection"))? !Curl_checkProxyheaders(conn, "Proxy-Connection"))?
"Proxy-Connection: Keep-Alive\r\n":"", "Proxy-Connection: Keep-Alive\r\n":"",
te te,
altused ? altused : ""
); );
/* clear userpwd and proxyuserpwd to avoid re-using old credentials /* clear userpwd and proxyuserpwd to avoid re-using old credentials
* from re-used connections */ * from re-used connections */
Curl_safefree(conn->allocptr.userpwd); Curl_safefree(conn->allocptr.userpwd);
Curl_safefree(conn->allocptr.proxyuserpwd); Curl_safefree(conn->allocptr.proxyuserpwd);
free(altused);
if(result) if(result)
return result; return result;

View File

@ -3187,6 +3187,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
conn->bits.conn_to_host = TRUE; conn->bits.conn_to_host = TRUE;
conn->conn_to_port = nport; conn->conn_to_port = nport;
conn->bits.conn_to_port = TRUE; conn->bits.conn_to_port = TRUE;
conn->bits.altused = TRUE;
infof(data, "Alt-svc connecting from [%s]%s:%d to [%s]%s:%d\n", infof(data, "Alt-svc connecting from [%s]%s:%d to [%s]%s:%d\n",
Curl_alpnid2str(salpnid), host, conn->remote_port, Curl_alpnid2str(salpnid), host, conn->remote_port,
Curl_alpnid2str(nalpnid), hostd, nport); Curl_alpnid2str(nalpnid), hostd, nport);

View File

@ -405,6 +405,7 @@ struct ConnectBits {
the first time on the first connect function call */ the first time on the first connect function call */
bit close:1; /* if set, we close the connection after this request */ bit close:1; /* if set, we close the connection after this request */
bit reuse:1; /* if set, this is a re-used connection */ bit reuse:1; /* if set, this is a re-used connection */
bit altused:1; /* this is an alt-svc "redirect" */
bit conn_to_host:1; /* if set, this connection has a "connect to host" bit conn_to_host:1; /* if set, this connection has a "connect to host"
that overrides the host in the URL */ that overrides the host in the URL */
bit conn_to_port:1; /* if set, this connection has a "connect to port" bit conn_to_port:1; /* if set, this connection has a "connect to port"