Работа с HTTP-запросами
Для эффективного использования CodeIgniter необходимо иметь базовое понимание принципов работы HTTP-запросов и ответов. Поскольку с этим вы работаете при разработке веб-приложений, понимание концепций HTTP является необходимым для всех разработчиков, стремящихся к успеху.
В первой части этого раздела представлен обзор. После рассмотрения основных концепций мы обсудим, как работать с запросами и ответами в CodeIgniter.
Что такое HTTP?
HTTP — это просто текстовая конвенция, позволяющая двум машинам общаться друг с другом. Когда браузер запрашивает страницу, он спрашивает сервер, может ли он получить эту страницу. Затем сервер готовит страницу и отправляет ответ обратно браузеру, который ее запросил. По сути, все сводится к этому. Конечно, существуют некоторые сложности, но основы довольно просты.
HTTP — это термин, используемый для описания этой конвенции обмена. Он расшифровывается как HyperText Transfer Protocol. Ваша задача при разработке веб-приложений — всегда понимать, что запрашивает браузер, и уметь должным образом на него реагировать.
Запрос
Всякий раз, когда клиент (веб-браузер, мобильное приложение и т.д.) отправляет запрос, он отправляет небольшое текстовое сообщение на сервер и ожидает ответа.
Запрос может выглядеть примерно так:
GET / HTTP/1.1 Host codeigniter.com Accept: text/html User-Agent: Chrome/46.0.2490.80
Это сообщение отображает всю необходимую информацию о том, что запрашивает клиент. Оно указывает метод запроса (GET, POST, DELETE и т.д.) и поддерживаемую версию HTTP.
Запрос также включает ряд необязательных заголовков запроса, которые могут содержать разнообразную информацию, такую как языки, на которых клиент хочет видеть содержимое, типы форматов, которые принимает клиент, и многое другое. В Википедии есть статья, в которой перечислены все заголовки, если вы хотите с ней ознакомиться.
Ответ
После получения запроса сервер, используя информацию из запроса, сгенерирует некоторый вывод. Сервер упакует ваш вывод в качестве части своего ответа клиенту. Это также представлено как простое текстовое сообщение, которое выглядит примерно так:
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 05 Nov 2015 05:33:22 GMT
Content-Type: text/html; charset=UTF-8
<html>
. . .
</html>
Ответ сообщает клиенту, какую версию спецификации HTTP он использует и, возможно, самое важное, код состояния (200). Код состояния — это один из ряда кодов, стандартизированных для передачи определенного значения клиенту. Это может сообщить ему, что запрос был успешным (200), или что страница не найдена (404). На сайте IANA вы найдете полный список кодов состояния HTTP.
Работа с запросами и ответами
Хотя PHP предоставляет способы взаимодействия с заголовками запроса и ответа, CodeIgniter, как и большинство фреймворков, абстрагирует их, предоставляя вам согласованный и простой интерфейс к ним. Класс IncomingRequest — это объектно-ориентированное представление HTTP-запроса. Он предоставляет все необходимое:
use CodeIgniter\HTTP\IncomingRequest;
$request = service('request');
// the URI being requested (i.e., /about)
$request->uri->getPath();
// Retrieve $_GET and $_POST variables
$request->getGet('foo');
$request->getPost('foo');
// Retrieve from $_REQUEST which should include
// both $_GET and $_POST contents
$request->getVar('foo');
// Retrieve JSON from AJAX calls
$request->getJSON();
// Retrieve server variables
$request->getServer('Host');
// Retrieve an HTTP Request header, with case-insensitive names
$request->getHeader('host');
$request->getHeader('Content-Type');
$request->getMethod(); // GET, POST, PUT, etc
Класс запроса выполняет много работы в фоновом режиме, о которой вам не нужно беспокоиться. Методы isAJAX() и isSecure() проверяют несколько различных методов, чтобы определить правильный ответ.
Примечание
Метод isAJAX() зависит от заголовка X-Requested-With, который в некоторых случаях не отправляется по умолчанию в XHR-запросах через JavaScript (например, fetch). Смотрите раздел AJAX-запросы о том, как избежать этой проблемы.
CodeIgniter также предоставляет класс Response, который представляет HTTP-ответ в объектно-ориентированной форме. Это дает вам простой и мощный способ построения ответа клиенту:
use CodeIgniter\HTTP\Response;
$response = service('response');
$response->setStatusCode(Response::HTTP_OK);
$response->setBody($output);
$response->setHeader('Content-type', 'text/html');
$response->noCache();
// Sends the output to the browser
// This is typically handled by the framework
$response->send();
Кроме того, класс Response позволяет работать с кэшем HTTP для лучшей производительности.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/concepts/http.html