Spec-Zone.ru › Phalcon 2

Возвращение ответов

Часть цикла HTTP заключается в возвращении ответов клиентам. Phalcon\Http\Response — это компонент Phalcon, предназначенный для выполнения этой задачи. Ответы HTTP обычно состоят из заголовков и тела. Ниже приведен пример базового использования:

//Getting a response instance
$response = new \Phalcon\Http\Response();

//Set status code
$response->setStatusCode(404, "Not Found");

//Set the content of the response
$response->setContent("Sorry, the page doesn't exist");

//Send response to the client
$response->send();

Если вы используете полную MVC-стек, вам не нужно создавать ответы вручную. Однако, если вам нужно вернуть ответ непосредственно из действия контроллера, следуйте этому примеру:

class FeedController extends Phalcon\Mvc\Controller
{

    public function getAction()
    {
        // Getting a response instance
        $response = new \Phalcon\Http\Response();

        $feed = //.. load here the feed

        //Set the content of the response
        $response->setContent($feed->asString());

        //Return the response
        return $response;
    }

}

Работа с заголовками

Заголовки — важная часть ответа HTTP. Они содержат полезную информацию о состоянии ответа, например, код состояния HTTP, тип ответа и многое другое.

Вы можете задавать заголовки следующим образом:

//Setting a header by it's name
$response->setHeader("Content-Type", "application/pdf");
$response->setHeader("Content-Disposition", 'attachment; filename="downloaded.pdf"');

//Setting a raw header
$response->setRawHeader("HTTP/1.1 200 OK");

Мешок Phalcon\Http\Response\Headers внутренне управляет заголовками. Этот класс извлекает заголовки перед отправкой их клиенту:

//Get the headers bag
$headers = $response->getHeaders();

//Get a header by its name
$contentType = $response->getHeaders()->get("Content-Type");

Выполнение переадресаций

С помощью Phalcon\Http\Response вы также можете выполнять переадресации HTTP:

//Redirect to the default URI
$response->redirect();

//Redirect to the local base URI
$response->redirect("posts/index");

//Redirect to an external URL
$response->redirect("http://en.wikipedia.org", true);

//Redirect specifyng the HTTP status code
$response->redirect("http://www.example.com/new-location", true, 301);

Все внутренние URI генерируются с использованием службы «url» (по умолчанию Phalcon\Mvc\Url). Этот пример демонстрирует, как выполнить переадресацию, используя маршрут, который вы определили в своем приложении:

//Redirect based on a named route
return $response->redirect(array(
    "for" => "index-lang",
    "lang" => "jp",
    "controller" => "index"
));

Обратите внимание, что переадресация не отключает компонент представления, поэтому, если представление связано с текущим действием, оно будет выполнено. Вы можете отключить представление из контроллера, выполнив $this->view->disable();

Кэширование HTTP

Один из самых простых способов улучшить производительность ваших приложений и уменьшить трафик сервера — использование кэширования HTTP. Большинство современных браузеров поддерживают кэширование HTTP. Кэширование HTTP — одна из причин, по которой многие веб-сайты работают быстро.

Кэширование HTTP может быть изменено в следующих значениях заголовков, отправленных приложением при первом отображении страницы:

  • Expires: С помощью этого заголовка приложение может установить дату в будущем или прошлом, сообщая браузеру, когда страница должна истечь.
  • Cache-Control: Этот заголовок позволяет указать, сколько времени страница должна считаться актуальной в браузере.
  • Last-Modified: Этот заголовок сообщает браузеру, когда сайт был обновлён в последний раз, избегая повторной загрузки страницы
  • ETag: ETag — уникальный идентификатор, который должен быть создан, включая метку времени изменения текущей страницы

Установка срока действия

Дата истечения срока действия — один из самых простых и эффективных способов кэширования страницы на стороне клиента (браузера). Начиная с текущей даты, мы добавляем количество времени, в течение которого страница будет храниться в кэше браузера. До истечения этой даты новые данные с сервера запрашиваться не будут:

$expireDate = new DateTime();
$expireDate->modify('+2 months');

$response->setExpires($expireDate);

Компонент Response автоматически отображает дату в часовом поясе GMT, как ожидается в заголовке Expires.

Если мы установим это значение на дату в прошлом, браузер всегда будет обновлять запрашиваемую страницу:

$expireDate = new DateTime();
$expireDate->modify('-10 minutes');

$response->setExpires($expireDate);

Браузеры полагаются на часы клиента, чтобы оценить, прошла ли эта дата. Часы клиента можно изменить, чтобы заставить страницы истекать, и это может представлять ограничение для этого механизма кэширования.

Cache-Control

Этот заголовок предоставляет более безопасный способ кэширования страниц. Нам просто нужно указать время в секундах, сообщая браузеру, как долго он должен хранить страницу в своём кэше:

//Starting from now, cache the page for one day
$response->setHeader('Cache-Control', 'max-age=86400');

Обратный эффект (избежание кэширования страницы) достигается следующим образом:

//Never cache the served page
$response->setHeader('Cache-Control', 'private, max-age=0, must-revalidate');

ETag

«Entity-tag» или «E-tag» — уникальный идентификатор, который помогает браузеру понять, изменилась ли страница между двумя запросами. Идентификатор должен быть вычислен с учётом того, что он должен измениться, если ранее предоставленное содержимое изменилось:

//Calculate the E-Tag based on the modification time of the latest news
$recentDate = News::maximum(array('column' => 'created_at'));
$eTag = md5($recentDate);

//Send an E-Tag header
$response->setHeader('E-Tag', $eTag);

© 2011–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/response.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API