Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7365bc0

Browse filesBrowse files
committed
bug #16265 [BrowserKit] Corrected HTTP_HOST logic (Naktibalda)
This PR was submitted for the master branch but it was merged into the 2.3 branch instead (closes #16265). Discussion ---------- [BrowserKit] Corrected HTTP_HOST logic HTTP_HOST is just a header - it does not override URI, uri does not override HTTP_HOST header. If HTTP_HOST is not set then and only then hostname is extracted from uri. | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | yes | Deprecations? | no | Tests pass? | yes | Fixed tickets | #15398 | License | MIT | Doc PR | Commits ------- b5f524d [BrowserKit] Corrected HTTP_HOST logic #15398
2 parents 72fa3bd + b5f524d commit 7365bc0
Copy full SHA for 7365bc0

File tree

Expand file treeCollapse file tree

2 files changed

+13
-32
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+13
-32
lines changed

‎src/Symfony/Component/BrowserKit/Client.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/BrowserKit/Client.php
+4-7Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ public function insulate($insulated = true)
110110
public function setServerParameters(array $server)
111111
{
112112
$this->server = array_merge(array(
113-
'HTTP_HOST' => 'localhost',
114113
'HTTP_USER_AGENT' => 'Symfony2 BrowserKit',
115114
), $server);
116115
}
@@ -273,21 +272,19 @@ public function request($method, $uri, array $parameters = array(), array $files
273272

274273
$uri = $this->getAbsoluteUri($uri);
275274

276-
if (!empty($server['HTTP_HOST'])) {
277-
$uri = preg_replace('{^(https?\://)'.preg_quote($this->extractHost($uri)).'}', '${1}'.$server['HTTP_HOST'], $uri);
278-
}
275+
$server = array_merge($this->server, $server);
279276

280277
if (isset($server['HTTPS'])) {
281278
$uri = preg_replace('{^'.parse_url($uri, PHP_URL_SCHEME).'}', $server['HTTPS'] ? 'https' : 'http', $uri);
282279
}
283280

284-
$server = array_merge($this->server, $server);
285-
286281
if (!$this->history->isEmpty()) {
287282
$server['HTTP_REFERER'] = $this->history->current()->getUri();
288283
}
289284

290-
$server['HTTP_HOST'] = $this->extractHost($uri);
285+
if (empty($server['HTTP_HOST'])) {
286+
$server['HTTP_HOST'] = $this->extractHost($uri);
287+
}
291288
$server['HTTPS'] = 'https' == parse_url($uri, PHP_URL_SCHEME);
292289

293290
$this->internalRequest = new Request($uri, $method, $parameters, $files, $this->cookieJar->allValues($uri), $server, $content);

‎src/Symfony/Component/BrowserKit/Tests/ClientTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/BrowserKit/Tests/ClientTest.php
+9-25Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,14 @@ public function testGetRequest()
9393
$this->assertEquals('http://example.com/', $client->getRequest()->getUri(), '->getCrawler() returns the Request of the last request');
9494
}
9595

96-
public function testGetRequestWithIpAsHost()
96+
public function testGetRequestWithIpAsHttpHost()
9797
{
9898
$client = new TestClient();
9999
$client->request('GET', 'https://example.com/foo', array(), array(), array('HTTP_HOST' => '127.0.0.1'));
100100

101-
$this->assertEquals('https://127.0.0.1/foo', $client->getRequest()->getUri());
101+
$this->assertEquals('https://example.com/foo', $client->getRequest()->getUri());
102+
$headers = $client->getRequest()->getServer();
103+
$this->assertEquals('127.0.0.1', $headers['HTTP_HOST']);
102104
}
103105

104106
public function testGetResponse()
@@ -212,24 +214,6 @@ public function testRequestURIConversion()
212214
$this->assertEquals('http://www.example.com/http', $client->getRequest()->getUri(), '->request() uses the previous request for relative URLs');
213215
}
214216

215-
public function testRequestURIConversionByServerHost()
216-
{
217-
$client = new TestClient();
218-
219-
$server = array('HTTP_HOST' => 'www.exampl+e.com:8000');
220-
$parameters = array();
221-
$files = array();
222-
223-
$client->request('GET', 'http://exampl+e.com', $parameters, $files, $server);
224-
$this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST to add port');
225-
226-
$client->request('GET', 'http://exampl+e.com:8888', $parameters, $files, $server);
227-
$this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST to modify existing port');
228-
229-
$client->request('GET', 'http://exampl+e.com:8000', $parameters, $files, $server);
230-
$this->assertEquals('http://www.exampl+e.com:8000', $client->getRequest()->getUri(), '->request() uses HTTP_HOST respects correct set port');
231-
}
232-
233217
public function testRequestReferer()
234218
{
235219
$client = new TestClient();
@@ -572,7 +556,7 @@ public function testInsulatedRequests()
572556
public function testGetServerParameter()
573557
{
574558
$client = new TestClient();
575-
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
559+
$this->assertEquals('', $client->getServerParameter('HTTP_HOST'));
576560
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
577561
$this->assertEquals('testvalue', $client->getServerParameter('testkey', 'testvalue'));
578562
}
@@ -581,7 +565,7 @@ public function testSetServerParameter()
581565
{
582566
$client = new TestClient();
583567

584-
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
568+
$this->assertEquals('', $client->getServerParameter('HTTP_HOST'));
585569
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
586570

587571
$client->setServerParameter('HTTP_HOST', 'testhost');
@@ -595,7 +579,7 @@ public function testSetServerParameterInRequest()
595579
{
596580
$client = new TestClient();
597581

598-
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
582+
$this->assertEquals('', $client->getServerParameter('HTTP_HOST'));
599583
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
600584

601585
$client->request('GET', 'https://www.example.com/https/www.example.com', array(), array(), array(
@@ -605,10 +589,10 @@ public function testSetServerParameterInRequest()
605589
'NEW_SERVER_KEY' => 'new-server-key-value',
606590
));
607591

608-
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
592+
$this->assertEquals('', $client->getServerParameter('HTTP_HOST'));
609593
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
610594

611-
$this->assertEquals('http://testhost/https/www.example.com', $client->getRequest()->getUri());
595+
$this->assertEquals('http://www.example.com/https/www.example.com', $client->getRequest()->getUri());
612596

613597
$server = $client->getRequest()->getServer();
614598

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.