Skip to content

Commit 28b598a

Browse files
committed
Send Connection: close for HTTP/1.1 and no Connection for HTTP/1.0
1 parent 165e5b5 commit 28b598a

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/Io/Sender.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ public function send(RequestInterface $request)
9494
}
9595

9696
// automatically add `Connection: close` request header for HTTP/1.1 requests to avoid connection reuse
97-
if ($request->getProtocolVersion() === '1.1' && !$request->hasHeader('Connection')) {
97+
if ($request->getProtocolVersion() === '1.1') {
9898
$request = $request->withHeader('Connection', 'close');
99+
} else {
100+
$request = $request->withoutHeader('Connection');
99101
}
100102

101103
// automatically add `Authorization: Basic …` request header if URL includes `user:pass@host`

tests/Io/SenderTest.php

+17-3
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,20 @@ public function getHttp10RequestShouldSendAGetRequestWithoutConnectionHeaderByDe
302302
$sender->send($request);
303303
}
304304

305+
/** @test */
306+
public function getHttp10RequestShouldSendAGetRequestWithoutConnectionHeaderEvenWhenConnectionKeepAliveHeaderIsSpecified()
307+
{
308+
$client = $this->getMockBuilder('React\Http\Client\Client')->disableOriginalConstructor()->getMock();
309+
$client->expects($this->once())->method('request')->with($this->callback(function (RequestInterface $request) {
310+
return !$request->hasHeader('Connection');
311+
}))->willReturn($this->getMockBuilder('React\Http\Io\ClientRequestStream')->disableOriginalConstructor()->getMock());
312+
313+
$sender = new Sender($client);
314+
315+
$request = new Request('GET', 'http://www.example.com', array('Connection' => 'keep-alive'), '', '1.0');
316+
$sender->send($request);
317+
}
318+
305319
/** @test */
306320
public function getHttp11RequestShouldSendAGetRequestWithConnectionCloseHeaderByDefault()
307321
{
@@ -317,16 +331,16 @@ public function getHttp11RequestShouldSendAGetRequestWithConnectionCloseHeaderBy
317331
}
318332

319333
/** @test */
320-
public function getHttp11RequestShouldSendAGetRequestWithGivenConnectionUpgradeHeader()
334+
public function getHttp11RequestShouldSendAGetRequestWithConnectionCloseHeaderEvenWhenConnectionKeepAliveHeaderIsSpecified()
321335
{
322336
$client = $this->getMockBuilder('React\Http\Client\Client')->disableOriginalConstructor()->getMock();
323337
$client->expects($this->once())->method('request')->with($this->callback(function (RequestInterface $request) {
324-
return $request->getHeaderLine('Connection') === 'upgrade';
338+
return $request->getHeaderLine('Connection') === 'close';
325339
}))->willReturn($this->getMockBuilder('React\Http\Io\ClientRequestStream')->disableOriginalConstructor()->getMock());
326340

327341
$sender = new Sender($client);
328342

329-
$request = new Request('GET', 'http://www.example.com', array('Connection' => 'upgrade'), '', '1.1');
343+
$request = new Request('GET', 'http://www.example.com', array('Connection' => 'keep-alive'), '', '1.1');
330344
$sender->send($request);
331345
}
332346

0 commit comments

Comments
 (0)