private function filter(Response $response, string $protocol = "1.0", array $connection = []): array
    {
        $headers = $response->getHeaders();

        if ($response->getStatus() < Status::OK) {
            unset($headers['content-length']); // 1xx responses do not have a body.
            return $headers;
        }

        $push = $response->getPush();

        if (!empty($push)) {
            $headers["link"] = [];
            foreach ($push as list($pushUri, $pushHeaders)) {
                $headers["link"][] = "<$pushUri>; rel=preload";
            }
        }

        $contentLength = $headers["content-length"][0] ?? null;
        $shouldClose = \in_array("close", $connection, true)
            || (isset($headers["connection"]) && \in_array("close", $headers["connection"], true));

        if ($contentLength !== null) {
            $shouldClose = $shouldClose || $protocol === "1.0";
            unset($headers["transfer-encoding"]);
        } elseif ($protocol === "1.1") {
            unset($headers["content-length"]);
        } else {
            $shouldClose = true;
        }

        if ($shouldClose) {
            $headers["connection"] = ["close"];
        } else {
            $headers["connection"] = ["keep-alive"];
            $keepAlive = "timeout={$this->options->getConnectionTimeout()}";
            $headers["keep-alive"] = [$keepAlive];
        }

        $headers["date"] = [$this->timeReference->getCurrentDate()];

        return $headers;
    }
private function filter(Response $response, string $protocol = "1.0", array $connection = []): array
    {
        $headers = $response->getHeaders();

        if ($response->getStatus() < Status::OK) {
            unset($headers['content-length']); // 1xx responses do not have a body.
            return $headers;
        }

        $push = $response->getPush();

        if (!empty($push)) {
            $headers["link"] = [];
            foreach ($push as list($pushUri, $pushHeaders)) {
                $headers["link"][] = "<$pushUri>; rel=preload";
            }
        }

        $contentLength = $headers["content-length"][0] ?? null;
        $shouldClose = \in_array("close", $connection, true)
            || (isset($headers["connection"]) && \in_array("close", $headers["connection"], true));

        if ($contentLength !== null) {
            $shouldClose = $shouldClose || $protocol === "1.0";
            unset($headers["transfer-encoding"]);
        } elseif ($protocol === "1.1") {
            unset($headers["content-length"]);
        } else {
            $shouldClose = true;
        }

        if ($shouldClose) {
            $headers["connection"] = ["close"];
        } else {
            $headers["connection"] = ["keep-alive"];
            $keepAlive = "timeout={$this->options->getConnectionTimeout()}";
            $headers["keep-alive"] = [$keepAlive];
        }

        $headers["date"] = [$this->timeReference->getCurrentDate()];

        return $headers;
    }
private function filter ( Response $ response , string $ protocol = "1.0" , array $ connection = [ ] ) : array { $ headers = $ response -> getHeaders ( ) ; if ( $ response -> getStatus ( ) < Status :: OK ) { unset ( $ headers [ 'content-length' ] ) ; // 1xx responses do not have a body. return $ headers ; } $ push = $ response -> getPush ( ) ; if ( ! empty ( $ push ) ) { $ headers [ "link" ] = [ ] ; foreach ( $ push as list ( $ pushUri , $ pushHeaders ) ) { $ headers [ "link" ] [ ] = "<$pushUri>; rel=preload" ; } } $ contentLength = $ headers [ "content-length" ] [ 0 ] ?? null ; $ shouldClose = \ in_array ( "close" , $ connection , true ) || ( isset ( $ headers [ "connection" ] ) && \ in_array ( "close" , $ headers [ "connection" ] , true ) ) ; if ( $ contentLength !== null ) { $ shouldClose = $ shouldClose || $ protocol === "1.0" ; unset ( $ headers [ "transfer-encoding" ] ) ; } elseif ( $ protocol === "1.1" ) { unset ( $ headers [ "content-length" ] ) ; } else { $ shouldClose = true ; } if ( $ shouldClose ) { $ headers [ "connection" ] = [ "close" ] ; } else { $ headers [ "connection" ] = [ "keep-alive" ] ; $ keepAlive = "timeout={$this->options->getConnectionTimeout()}" ; $ headers [ "keep-alive" ] = [ $ keepAlive ] ; } $ headers [ "date" ] = [ $ this -> timeReference -> getCurrentDate ( ) ] ; return $ headers ; }
Filters and updates response headers based on protocol and connection header from the request.

@param \Amp\Http\Server\Response $response
@param string                    $protocol Request protocol.
@param array                     $connection Request connection header.

@return string[][] Response headers to be written.
Filters and updates response headers based on protocol and connection header from the request .