diff --git a/composer.json b/composer.json index 52cc0df7..fcc46c28 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "php": ">=7.1", "amphp/amp": "^2", "amphp/byte-stream": "^1.6", - "amphp/http": "^1.2", + "amphp/http": "^1.3", "amphp/socket": "dev-master as 1.0", "amphp/file": "^0.2 || ^0.3", "kelunik/certificate": "^1.1", diff --git a/src/Connection/Http1Connection.php b/src/Connection/Http1Connection.php index 054dd8a5..b659d863 100644 --- a/src/Connection/Http1Connection.php +++ b/src/Connection/Http1Connection.php @@ -9,6 +9,7 @@ use Amp\CancelledException; use Amp\Deferred; use Amp\Emitter; +use Amp\Http; use Amp\Http\Client\HttpException; use Amp\Http\Client\Internal\CombinedCancellationToken; use Amp\Http\Client\Internal\RequestWriter; @@ -394,21 +395,12 @@ private function determineKeepAliveTimeout(Response $response): int return 0; } - $responseKeepAliveHeader = $response->getHeader('keep-alive'); + $params = Http\createFieldValueComponentMap(Http\parseFieldValueComponents($response, 'keep-alive')); - if ($responseKeepAliveHeader === null) { - return $this->priorTimeout; - } - - $parts = \array_map('trim', \explode(',', $responseKeepAliveHeader)); - - $params = []; - foreach ($parts as $part) { - [$key, $value] = \array_map('trim', \explode('=', $part)) + [null, null]; - $params[$key] = (int) $value; - } - - return $this->priorTimeout = \min(\max(0, $params['timeout'] ?? 0), self::MAX_KEEP_ALIVE_TIMEOUT); + return $this->priorTimeout = \min( + \max(0, $params['timeout'] ?? $this->priorTimeout), + self::MAX_KEEP_ALIVE_TIMEOUT + ); } private function determineProtocolVersion(Request $request): string