src/Http/ServerRequest.php
public function withUri(UriInterface $uri, $preserve_host = false)
    {
        $request = clone $this;
        $request->uri = $uri;

        if (!$preserve_host && $uri->getHost() !== '') {
            $request = $request->withHeader('Host', $uri->getHost());
        } elseif ($preserve_host && !count($request->getHeader('Host')) && $uri->getHost() !== '') {
            $request = $request->withHeader('Host', $uri->getHost());
        }

        return $request;
    }
public function withUri(UriInterface $uri, $preserve_host = false)
    {
        $request = clone $this;
        $request->uri = $uri;

        if (!$preserve_host && $uri->getHost() !== '') {
            $request = $request->withHeader('Host', $uri->getHost());
        } elseif ($preserve_host && !count($request->getHeader('Host')) && $uri->getHost() !== '') {
            $request = $request->withHeader('Host', $uri->getHost());
        }

        return $request;
    }
Returns an instance with the provided URI.
This method MUST update the Host header of the returned request by
default if the URI contains a host component. If the URI does not
contain a host component, any pre-existing Host header MUST be carried
over to the returned request.
You can opt-in to preserving the original state of the Host header by
setting `$preserveHost` to `true`. When `$preserveHost` is set to
`true`, this method interacts with the Host header in the following ways:
- If the Host header is missing or empty, and the new URI contains
a host component, this method MUST update the Host header in the returned
request.
- If the Host header is missing or empty, and the new URI does not contain a
host component, this method MUST NOT update the Host header in the returned
request.
- If a Host header is present and non-empty, this method MUST NOT update
the Host header in the returned request.
This method MUST be implemented in such a way as to retain the
immutability of the message, and MUST return an instance that has the
new UriInterface instance.

@link http://tools.ietf.org/html/rfc3986#section-4.3
@param UriInterface $uri New request URI to use.
@param bool $preserve_host Preserve the original state of the Host header.
@return RequestInterface