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:
parent
026840e35c
commit
98c3f14871
@ -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
|
||||||
|
@ -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)
|
||||||
|
16
lib/http.c
16
lib/http.c
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user