]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[http] Include port in HTTP Host header as needed
authorMalte Starostik <lists@malte.homeip.net>
Fri, 15 Jul 2011 14:31:56 +0000 (16:31 +0200)
committerMichael Brown <mcb30@ipxe.org>
Fri, 15 Jul 2011 15:46:58 +0000 (16:46 +0100)
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 <mcb30@ipxe.org>
src/net/tcp/http.c

index 012b226835839c6a771eb9c72a95fb94e57b83c1..cee751335db762a4aba293b06a0491a0ddbb7d72 100644 (file)
@@ -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=" : "" ),