From 69b7d57265679d76e26581d034e8f8ab5168bb27 Mon Sep 17 00:00:00 2001 From: Malte Starostik Date: Fri, 15 Jul 2011 16:31:56 +0200 Subject: [PATCH] [http] Include port in HTTP Host header as needed According to section 14.23 of RFC2616, an HTTP Host header without port implies the default port is used. Thus, when fetching from anywhere but port 80 for HTTP or 443 for HTTPS, the port ought to be explicitly given in that header. Otherwise, some servers might fail to associate the request with the correct virtual host or generate incorrect self-referencing URLs. Signed-off-by: Michael Brown --- src/net/tcp/http.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/net/tcp/http.c b/src/net/tcp/http.c index 012b2268..cee75133 100644 --- a/src/net/tcp/http.c +++ b/src/net/tcp/http.c @@ -662,13 +662,17 @@ static void http_step ( struct http_request *http ) { if ( ( rc = xfer_printf ( &http->socket, "%s %s%s HTTP/1.1\r\n" "User-Agent: iPXE/" VERSION "\r\n" - "Host: %s\r\n" + "Host: %s%s%s\r\n" "%s%s%s%s%s%s%s" "\r\n", ( ( http->flags & HTTP_HEAD_ONLY ) ? "HEAD" : "GET" ), ( http->uri->path ? "" : "/" ), request, host, + ( http->uri->port ? + ":" : "" ), + ( http->uri->port ? + http->uri->port : "" ), ( ( http->flags & HTTP_KEEPALIVE ) ? "Connection: Keep-Alive\r\n" : "" ), ( partial ? "Range: bytes=" : "" ),