Skip to content

Commit

Permalink
Merge branch 'imjoehaines-stop-overwriting-host-header' into 3.x
Browse files Browse the repository at this point in the history
Closes #2391
  • Loading branch information
akrabat committed Apr 14, 2018
2 parents d0d9655 + a5fa26a commit 289fd6c
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 3 deletions.
6 changes: 4 additions & 2 deletions Slim/Http/Request.php
Expand Up @@ -197,8 +197,10 @@ public function __construct(
$this->protocolVersion = str_replace('HTTP/', '', $serverParams['SERVER_PROTOCOL']);
}

if (!$this->headers->has('Host') || $this->uri->getHost() !== '') {
$this->headers->set('Host', $this->uri->getHost());
if (!$this->headers->has('Host') && $this->uri->getHost() !== '') {
$port = $this->uri->getPort() ? ":{$this->uri->getPort()}" : '';

$this->headers->set('Host', $this->uri->getHost() . $port);
}

$this->registerMediaTypeParser('application/json', function ($input) {
Expand Down
82 changes: 81 additions & 1 deletion tests/Http/RequestTest.php
Expand Up @@ -46,12 +46,92 @@ public function testDisableSetter()
$this->assertFalse(property_exists($request, 'foo'));
}

public function testAddsHostHeaderFromUri()
public function testDoesNotAddHostHeaderFromUriIfAlreadySet()
{
$request = $this->requestFactory();

$this->assertEquals('localhost', $request->getHeaderLine('Host'));
}

/**
* @see #2391
*/
public function testAddsHostHeaderFromUriIfNotSet()
{
$env = Environment::mock();

$uri = Uri::createFromString('https://example.com/foo/bar?abc=123');

$headers = Headers::createFromEnvironment($env);
$headers->remove('Host');

$cookies = [
'user' => 'john',
'id' => '123',
];

$serverParams = $env->all();
$body = new RequestBody();
$uploadedFiles = UploadedFile::createFromEnvironment($env);

$request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body, $uploadedFiles);

$this->assertEquals('example.com', $request->getHeaderLine('Host'));
}

/**
* @see #2391
*/
public function testAddsPortToHostHeaderIfSetWhenHostHeaderIsMissingFromRequest()
{
$env = Environment::mock();

$uri = Uri::createFromString('https://example.com:8443/foo/bar?abc=123');

$headers = Headers::createFromEnvironment($env);
$headers->remove('Host');

$cookies = [
'user' => 'john',
'id' => '123',
];

$serverParams = $env->all();
$body = new RequestBody();
$uploadedFiles = UploadedFile::createFromEnvironment($env);

$request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body, $uploadedFiles);

$this->assertEquals('example.com:8443', $request->getHeaderLine('Host'));
}

/**
* @see #2391
*/
public function testDoesntAddHostHeaderFromUriIfNeitherAreSet()
{
$env = Environment::mock();

$uri = Uri::createFromString('https://example.com/foo/bar?abc=123')
->withHost('');

$headers = Headers::createFromEnvironment($env);
$headers->remove('Host');

$cookies = [
'user' => 'john',
'id' => '123',
];

$serverParams = $env->all();
$body = new RequestBody();
$uploadedFiles = UploadedFile::createFromEnvironment($env);

$request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body, $uploadedFiles);

$this->assertEquals('', $request->getHeaderLine('Host'));
}

/*******************************************************************************
* Method
******************************************************************************/
Expand Down

0 comments on commit 289fd6c

Please sign in to comment.