changed case: use new host name for subsequent HTTP requests

When a HTTP connection is re-used for a subsequent request without
proxy, it would always re-use the Host: header of the first request. As
host names are case insensitive it would make curl send another host
name case that what the particular request used.

Now it will instead always use the most recent host name to always use
the desired casing.

Added test case 1318 to verify.

Bug: http://curl.haxx.se/mail/lib-2011-12/0314.html
Reported by: Alex Vinnik
This commit is contained in:
Daniel Stenberg 2011-12-31 10:39:54 +01:00
Родитель 5e0a44e4d5
Коммит 207cf15032
3 изменённых файлов: 64 добавлений и 9 удалений

Просмотреть файл

@ -4666,14 +4666,10 @@ static void reuse_conn(struct connectdata *old_conn,
old_conn->proxypasswd = NULL;
}
/* host can change, when doing keepalive with a proxy ! */
if(conn->bits.proxy) {
Curl_safefree(conn->host.rawalloc);
conn->host=old_conn->host;
}
else
/* free the newly allocated name buffer */
Curl_safefree(old_conn->host.rawalloc);
/* host can change, when doing keepalive with a proxy or if the case is
different this time etc */
Curl_safefree(conn->host.rawalloc);
conn->host=old_conn->host;
/* persist connection info in session handle */
Curl_persistconninfo(conn);

Просмотреть файл

@ -81,7 +81,7 @@ test1208 test1209 test1210 test1211 \
test1220 \
test1300 test1301 test1302 test1303 test1304 test1305 \
test1306 test1307 test1308 test1309 test1310 test1311 test1312 test1313 \
test1314 test1315 test1317 \
test1314 test1315 test1317 test1318 \
test2000 test2001 test2002 test2003 test2004
EXTRA_DIST = $(TESTCASES) DISABLED

59
tests/data/test1318 Normal file
Просмотреть файл

@ -0,0 +1,59 @@
<testcase>
<info>
<keywords>
HTTP
HTTP GET
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 0
</data>
<data1>
HTTP/1.1 200 second version
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 0
</data1>
</reply>
#
# Client-side
<client>
<server>
http
</server>
<name>
HTTP with same host name using different cases
</name>
<command>
--resolve MiXeDcAsE.cOm:%HTTPPORT:%HOSTIP http://MiXeDcAsE.cOm:%HTTPPORT/1318 http://mixedcase.com:%HTTPPORT/13180001
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /1318 HTTP/1.1
Host: MiXeDcAsE.cOm:%HTTPPORT
Accept: */*
GET /13180001 HTTP/1.1
Host: mixedcase.com:%HTTPPORT
Accept: */*
</protocol>
</verify>
</testcase>