Henrik Nordstrom wrote:
fre 2010-03-05 klockan 23:08 +1300 skrev Amos Jeffries:
Sending HTTP/1.1 in all version details sent to peers and servers.
Passes the basic tests I've thrown at it. If anyone can think of some
please do.
The src/client_side.cc change looks wrong to me.. should not overwrite
the version sent by the client when parsing the request headers.
upgrade should only be done in http.cc when making the outgoing request,
and client_side_reply.cc when making the outgoing response, between
there the received version should be preserved as much as possible.
Oops, okay fixed.
Revised update attached. I have not had time to run this one through the
tests yet. It also turns on the waiting connection keep-alive logics I
missed earlier.
Amos
--
Please be using
Current Stable Squid 2.7.STABLE7 or 3.0.STABLE24
Current Beta Squid 3.1.0.17
=== modified file 'src/HttpMsg.cc'
--- src/HttpMsg.cc 2009-12-31 11:46:41 +0000
+++ src/HttpMsg.cc 2010-03-05 14:27:25 +0000
@@ -321,18 +321,13 @@
int
httpMsgIsPersistent(HttpVersion const &http_ver, const HttpHeader * hdr)
{
-#if WHEN_SQUID_IS_HTTP1_1
-
if ((http_ver.major >= 1) && (http_ver.minor >= 1)) {
/*
* for modern versions of HTTP: persistent unless there is
* a "Connection: close" header.
*/
return !httpHeaderHasConnDir(hdr, "close");
- } else
-#else
- {
-#endif
+ } else {
/*
* Persistent connections in Netscape 3.x are allegedly broken,
* return false if it is a browser connection. If there is a
@@ -340,17 +335,17 @@
*/
const char *agent = hdr->getStr(HDR_USER_AGENT);
- if (agent && !hdr->has(HDR_VIA)) {
- if (!strncasecmp(agent, "Mozilla/3.", 10))
- return 0;
-
- if (!strncasecmp(agent, "Netscape/3.", 11))
- return 0;
+ if (agent && !hdr->has(HDR_VIA)) {
+ if (!strncasecmp(agent, "Mozilla/3.", 10))
+ return 0;
+
+ if (!strncasecmp(agent, "Netscape/3.", 11))
+ return 0;
+ }
+
+ /* for old versions of HTTP: persistent if has "keep-alive" */
+ return httpHeaderHasConnDir(hdr, "keep-alive");
}
-
- /* for old versions of HTTP: persistent if has "keep-alive" */
- return httpHeaderHasConnDir(hdr, "keep-alive");
-}
}
void HttpMsg::packInto(Packer *p, bool full_uri) const
=== modified file 'src/HttpRequest.cc'
--- src/HttpRequest.cc 2010-02-25 23:00:39 +0000
+++ src/HttpRequest.cc 2010-03-05 14:20:16 +0000
@@ -327,8 +327,9 @@
{
assert(p);
/* pack request-line */
- packerPrintf(p, "%s " SQUIDSTRINGPH " HTTP/1.0\r\n",
- RequestMethodStr(method), SQUIDSTRINGPRINT(urlpath));
+ packerPrintf(p, "%s " SQUIDSTRINGPH " HTTP/%d.%d\r\n",
+ RequestMethodStr(method), SQUIDSTRINGPRINT(urlpath),
+ http_ver.major, http_ver.minor);
/* headers */
header.packInto(p);
/* trailer */
=== modified file 'src/client_side.cc'
--- src/client_side.cc 2010-03-05 10:33:07 +0000
+++ src/client_side.cc 2010-03-05 14:37:07 +0000
@@ -716,8 +716,8 @@
debugs(33, 3, "clientSetKeepaliveFlag: method = " <<
RequestMethodStr(request->method));
+ /* We are HTTP/1.0 facing clients still */
HttpVersion http_ver(1,0);
- /* we are HTTP/1.0, no matter what the client requests... */
if (httpMsgIsPersistent(http_ver, req_hdr))
request->flags.proxy_keepalive = 1;
=== modified file 'src/client_side_request.cc'
--- src/client_side_request.cc 2010-02-07 03:38:46 +0000
+++ src/client_side_request.cc 2010-03-05 14:25:52 +0000
@@ -367,8 +367,8 @@
request->my_addr.SetPort(0);
- /* RFC 2616 says 'upgrade' to our 1.0 regardless of what the client is */
- HttpVersion http_ver(1,0);
+ /* Our version is HTTP/1.1 */
+ HttpVersion http_ver(1,1);
request->http_ver = http_ver;
http->request = HTTPMSGLOCK(request);
=== modified file 'src/http.cc'
--- src/http.cc 2010-03-05 01:38:57 +0000
+++ src/http.cc 2010-03-05 14:20:16 +0000
@@ -1940,7 +1940,7 @@
http_state_flags stateFlags)
{
const int offset = mb->size;
- HttpVersion httpver(1,0);
+ HttpVersion httpver(1,1);
mb->Printf("%s %s HTTP/%d.%d\r\n",
RequestMethodStr(aRequest->method),
aRequest->urlpath.size() ? aRequest->urlpath.termedBuf() : "/",
@@ -2163,15 +2163,6 @@
deleteThis("HttpStateData::abortTransaction");
}
-#if DEAD_CODE
-void
-httpBuildVersion(HttpVersion * version, unsigned int major, unsigned int minor)
-{
- version->major = major;
- version->minor = minor;
-}
-#endif
-
HttpRequest *
HttpStateData::originalRequest()
{
=== modified file 'src/icmp/net_db.cc'
--- src/icmp/net_db.cc 2010-02-06 06:32:11 +0000
+++ src/icmp/net_db.cc 2010-03-05 14:20:16 +0000
@@ -1321,7 +1321,7 @@
HTTPMSGLOCK(ex->r);
assert(NULL != ex->r);
- ex->r->http_ver = HttpVersion(1,0);
+ ex->r->http_ver = HttpVersion(1,1);
ex->connstate = STATE_HEADER;
ex->e = storeCreateEntry(uri, uri, request_flags(), METHOD_GET);
ex->buf_sz = NETDB_REQBUF_SZ;
=== modified file 'src/tunnel.cc'
--- src/tunnel.cc 2009-09-04 11:38:28 +0000
+++ src/tunnel.cc 2010-03-05 14:20:16 +0000
@@ -710,7 +710,7 @@
flags.proxying = tunnelState->request->flags.proxying;
MemBuf mb;
mb.init();
- mb.Printf("CONNECT %s HTTP/1.0\r\n", tunnelState->url);
+ mb.Printf("CONNECT %s HTTP/1.1\r\n", tunnelState->url);
HttpStateData::httpBuildRequestHeader(tunnelState->request,
tunnelState->request,
NULL, /* StoreEntry */