Работа с HTTP-запросами

Чтобы получить максимальную отдачу от CodeIgniter, вам необходимо иметь общее представление о том, как работают HTTP-запросы и ответы. Поскольку это то, с чем вы работаете при разработке веб-приложений, понимание концепций HTTP является обязательным для всех разработчиков, которые хотят добиться успеха.

В первой части этой главы дается обзор. После того, как концепции разойдутся, мы обсудим, как работать с запросами и ответами в CodeIgniter.

Что такое HTTP?

HTTP — это просто текстовое соглашение, которое позволяет двум машинам общаться друг с другом. Когда браузер запрашивает страницу, он спрашивает сервер, может ли он получить эту страницу. Затем сервер подготавливает страницу и отправляет ответ браузеру, который его запросил. Это почти все. Очевидно, что есть некоторые сложности, которые вы можете использовать, но основы действительно довольно просты.

HTTP — это термин, используемый для описания соглашения об обмене. Это означает протокол передачи гипертекста. При разработке веб-приложений ваша цель — всегда понимать, что запрашивает браузер, и иметь возможность адекватно реагировать.

Запрос

Всякий раз, когда клиент (веб-браузер, приложение для смартфона и т. Д.) Делает запрос, он отправляет небольшое текстовое сообщение на сервер и ждет ответа.

Запрос будет выглядеть примерно так:

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 (т.е. выборки). См. Раздел « Запросы 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 для достижения наилучшей производительности.

Добавить комментарий