HTTP для начинающих - Введение в работу протокола
Primary tabs
В этом уроке — общее описание протокола HTTP, по которому браузер и сервер обмениваются данными.
Именно с помощью этого протокола мы получаем веб-страницы и можем взаимодействовать с сайтами.
Обмен текстом
При работе этого протокола по сути между участниками пересылаются куски текста, оформленные особым образом, о чем поговорим дальше.
Определения
- HTTP (HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол общения клиента и сервера в вебе.
- Клиент — программа, которая отправляет запрос: браузер, мобильное приложение, утилита
curl. - Сервер — программа на удалённой машине, которая принимает запросы и отправляет ответы (веб-сервер плюс наш код).
Модель «запрос — ответ»
Общение по HTTP устроено просто и всегда происходит по одной схеме:
- клиент отправляет запрос (request) — например: «отдай мне страницу по такому-то адресу»;
- сервер обрабатывает его и возвращает ответ (response) — чаще всего HTML-код страницы, который браузер рисует на экране.
Инициатива всегда у клиента: сервер сам, без запроса, ничего никому не отправляет — он только отвечает.
БРАУЗЕР СЕРВЕР
| |
| запрос: GET /?q=node/7716 |
|------------------------------------>|
| |
| ответ: 200 OK + HTML-код страницы |
|<------------------------------------|
| |
При этом на практике открытие одной веб-страницы — это не один запрос, а десятки: отдельный — на сам HTML, и отдельные — на каждую картинку, файл стилей и скрипт.
Из чего состоит запрос
Запрос состоит из трёх частей:
- стартовая строка — метод, путь и версия протокола;
- заголовки (headers) — дополнительные сведения в формате
Имя: значение; - тело (body) — передаваемые данные, например содержимое отправленной формы (у GET-запросов тело обычно пустое).
GET /?q=node/7716 HTTP/1.1 Host: fkn.ktu10.com User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64) Firefox/141.0 Accept: text/html
Первая строка читается так: методом GET клиент хочет получить документ по пути /?q=node/7716, общаясь по версии HTTP/1.1. Дальше — заголовки: Host — имя сайта (на одном сервере может жить много сайтов), User-Agent — сведения о программе-клиенте, Accept — какие форматы ответа клиент готов принять.
Методы: GET и POST
Метод говорит серверу, что именно клиент хочет сделать. Для начала достаточно двух:
GET— получить данные (страницу, картинку). Именно GET браузер отправляет, когда вы открываете ссылку;POST— отправить данные на сервер: так отправляются формы (регистрация, комментарий), причём данные лежат в теле запроса.
Есть и другие методы (PUT, DELETE и т.д.) — познакомимся с ними позже, когда они реально понадобятся.
Из чего состоит ответ
Ответ устроен очень похоже:
- стартовая строка — версия протокола, код состояния и его текстовое описание;
- заголовки;
- тело — например, HTML-код страницы.
HTTP/1.1 200 OK Server: nginx Content-Type: text/html; charset=utf-8 Content-Length: 52134 <!DOCTYPE html> <html> ... начало HTML-кода страницы, который браузер превратит в привычную картинку ... </html>
Обратите внимание на заголовок Content-Type — он сообщает клиенту формат тела: text/html — страница, image/png — картинка, application/json — данные в формате JSON.
Коды ответов
Код состояния (статус-код) — короткий числовой «вердикт» сервера о том, чем закончился запрос. Первая цифра определяет группу:
- 2xx — всё хорошо:
200 OK— запрос выполнен; - 3xx — перенаправление (редирект):
301 Moved Permanently— «документ теперь постоянно живёт по другому адресу»; - 4xx — ошибка на стороне клиента:
404 Not Found— «такой страницы нет»,403 Forbidden— «доступ запрещён»; - 5xx — ошибка на стороне сервера:
500 Internal Server Error— так бывает, например, когда в нашем PHP-скрипте произошла ошибка.
HTTP «не помнит» клиента
HTTP — протокол без состояния (stateless): каждый запрос обрабатывается «с чистого листа», сервер сам по себе не знает, что два разных запроса пришли от одного человека. Поэтому были придуманы cookie и сессии — с их помощью сервер «узнаёт» пользователя между запросами. Как это устроено, разберём позже.
HTTPS
HTTPS — тот же HTTP, но данные между браузером и сервером шифруются. Логика запросов и ответов не меняется — меняется лишь «труба», по которой они идут. Такие сайты открываются по адресу, начинающемуся с https://, рядом с которым браузер обычно рисует замочек.
Как увидеть HTTP своими глазами
- Инструменты разработчика браузера. Нажмите
F12, откройте вкладку Network («Сеть») и обновите страницу — увидите все HTTP-запросы, которыми страница добывается. Кликните по первому: на вкладке Headers видны и запрос, и ответ со статусом. - Утилита
curlв терминале. Раз вы уже осваиваете терминал Linux, выполните:
curl -i https://fkn.ktu10.com/?q=node/7716
Флаг -i просит curl показать ответ целиком — вместе со стартовой строкой и заголовками: в терминале появится ровно то, что мы разбирали выше.
Контрольные вопросы
- Почему модель HTTP называют «запрос — ответ»? Кто всегда начинает общение?
- Из каких трёх частей состоит запрос? А ответ?
- Чем GET отличается от POST?
- Что означают коды 200, 301, 404, 500 — и к какой группе относится каждый?
- Что значит «протокол без состояния» и как сервер «узнаёт» пользователя между запросами?
- Log in to post comments
- 116 reads