You are here

public function Response::prepare in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/http-foundation/Response.php \Symfony\Component\HttpFoundation\Response::prepare()

Prepares the Response before it is sent to the client.

This method tweaks the Response to ensure that it is compliant with RFC 2616. Most of the changes are based on the Request that is "associated" with this Response.

Parameters

Request $request A Request instance:

Return value

Response The current response.

1 method overrides Response::prepare()
BinaryFileResponse::prepare in vendor/symfony/http-foundation/BinaryFileResponse.php
Prepares the Response before it is sent to the client.

File

vendor/symfony/http-foundation/Response.php, line 263

Class

Response
Response represents an HTTP response.

Namespace

Symfony\Component\HttpFoundation

Code

public function prepare(Request $request) {
  $headers = $this->headers;
  if ($this
    ->isInformational() || $this
    ->isEmpty()) {
    $this
      ->setContent(null);
    $headers
      ->remove('Content-Type');
    $headers
      ->remove('Content-Length');
  }
  else {

    // Content-type based on the Request
    if (!$headers
      ->has('Content-Type')) {
      $format = $request
        ->getRequestFormat();
      if (null !== $format && ($mimeType = $request
        ->getMimeType($format))) {
        $headers
          ->set('Content-Type', $mimeType);
      }
    }

    // Fix Content-Type
    $charset = $this->charset ?: 'UTF-8';
    if (!$headers
      ->has('Content-Type')) {
      $headers
        ->set('Content-Type', 'text/html; charset=' . $charset);
    }
    elseif (0 === stripos($headers
      ->get('Content-Type'), 'text/') && false === stripos($headers
      ->get('Content-Type'), 'charset')) {

      // add the charset
      $headers
        ->set('Content-Type', $headers
        ->get('Content-Type') . '; charset=' . $charset);
    }

    // Fix Content-Length
    if ($headers
      ->has('Transfer-Encoding')) {
      $headers
        ->remove('Content-Length');
    }
    if ($request
      ->isMethod('HEAD')) {

      // cf. RFC2616 14.13
      $length = $headers
        ->get('Content-Length');
      $this
        ->setContent(null);
      if ($length) {
        $headers
          ->set('Content-Length', $length);
      }
    }
  }

  // Fix protocol
  if ('HTTP/1.0' != $request->server
    ->get('SERVER_PROTOCOL')) {
    $this
      ->setProtocolVersion('1.1');
  }

  // Check if we need to send extra expire info headers
  if ('1.0' == $this
    ->getProtocolVersion() && 'no-cache' == $this->headers
    ->get('Cache-Control')) {
    $this->headers
      ->set('pragma', 'no-cache');
    $this->headers
      ->set('expires', -1);
  }
  $this
    ->ensureIEOverSSLCompatibility($request);
  return $this;
}