HTTP был разработан в 1990-х годах для создания первого интерактивного текстового веб-браузера. За эти годы протокол менялся и совершенствовался, становился более гибким и постепенно превратился в современный интернет. В статье рассмотрим принцип работы протокола и что важно знать о нём разработчику.

Принцип работы

Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol — протокол передачи гипертекста. Узнаем принципы работы на версии протокола — HTTP 1.1, её спецификация — RFC 2616.

В своей работе протокол использует клиент-серверную структуру передачи данных.

Как это работает?

Пользователь открывает приложение и формирует свой запрос, затем браузер посылает его на сервер. Запрос обрабатывается на сервере, где формируется ответ и отправляется пользователю. Дальше клиент может отправлять новые запросы, которые буду аналогично обработаны.

HTTP обеспечивает работу интернета. С его помощью решается важная задача — обмен данными между веб-браузером и веб-сервером. Помимо этого, протокол используют в качестве «транспорта» для передачи информации другим протоколам, например, таким как SOAP, XML-RPC и WebDAV.

👉🏼 Основные составляющие HTTP:

  • тело запроса и тело ответа;

  • заголовки запроса и ответа;

  • метод запроса;

  • URL и параметра запроса;

  • код ответа.

Структура запроса

HTTP-запрос состоит из метода, адреса (URI) и версии протокола. Например, запрос может быть таким:

GET /index.html HTTP/1.1

Метод передаёт информацию серверу о том, что пользователь хочет получить или сделать. Например, запрос, начинающийся с GET, означает, что клиент хочет получить информацию (get, англ. — получать).

Браузер отправляет HTTP-запрос
Браузер отправляет HTTP-запрос

Самые распространённые HTTP-методы

👉🏼 GET — получение информации с сервера.

В качестве информации выступает всё, что есть на сервере, например, видео, изображения, шрифты, CSS-файл, HTML-разметка или JSON-данные и многое другое.

POST — создание новой записи на сервере.

Один из немногих запросов к серверу, который обязательно должен содержать тело.

PUT — перезапись существующей информации на сервере.

Например, вы написали пост, а потом решили его полностью изменить. Для этого нужно подготовить актуальный текст и сделать запрос PUT с новым постом, который полностью заменит предыдущий.

DELETE — удаление существующей информации на сервере.

HTTP-запросы и ответы состоят из заголовков и тела сообщения.

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

Пример общего заголовка для большинства запросов:

Content-Type: text/html; charset=UTF-8
Content-Length: 208

Первый заголовок, Content-Type, говорит браузеру, какой тип документа он отправляет обратно. Самый распространённый тип — text/html, потому что все веб-страницы являются текстовыми файлами HTML. Также часто встречаются такие типы, как image/png — изображения, video/mpeg — видео, script/javascript — скрипт и другие.

Заголовок Content-length информирует о длине документа в байтах, что помогает браузеру рассчитать время загрузки файла.

HTTP-ответ содержит фактический запрошенный документ. Например, страница представляет собой простой HTML-файл:

<!DOCTYPE html>
<html lang="ru">
  <head>
    <title>Курсы HTML Academy</title>
  </head>
  <body>
    <h1>HTML Academy</h1>
    <p>интерактивные онлайн-курсы</p>
  </body>
</html>

Ответ HTTP также содержит статусный код, который показывает успешность выполнения запроса. Например, 200 OK означает успешное выполнение запроса, в то время как 404 Not Found означает, что запрошенный ресурс не найден.

Адрес URL

Чтобы посетить интернет-ресурсы, пользователь использует приложение браузера. Клиент вводит в браузере URL — Uniform Resource Locator или «Унифицированный Указатель Ресурса». Все URL, которые начинаются с http, дают сигнал браузеру, что необходимо использовать HTTP.

URL в адресной строке
URL в адресной строке

Код ответа

Код ответа или код состояния HTTP — это цифровой код, который возвращается HTTP-сервером и обозначает выполнение или невыполнение запроса клиента.

Спецификация HTTP 1.1 определяет 40 различных кодов. Каждый код состояния отмечен числовым идентификатором в диапазоне от 100 до 599.

Основные коды ответа:

  • 2xx — запрос успешно выполнен, например, 200 OK.
  • 3xx — перенаправление, то есть для выполнения запроса необходимы дополнительные действия, например, 301 Moved Permanently.
  • 4xx — ошибка, связанная с запросом клиента, например, 404 Not Found.
  • 5xx — ошибка, связанная с сервером, например, 500 Internal Server Error.

Код ответа — это важный способ передачи сообщений между клиентом и сервером в рамках протокола HTTP. Полный список кодов можно найти здесь: «Все HTTP-статусы».

Что важно для разработчика

Понимание работы протокола HTTP поможет разобраться с тем, как в целом работает интернет и передача данных.

‍Фронтендеры работают с данными, которые передаются разными протоколами. Важно понимать, как всё устроено, чтобы уметь решать типовые задачи.

✅ Обязательно знать:

  1. Основные методы HTTP: GET, POST, PUT, DELETE.

  2. Формат запросов и ответов.

  3. Статусы HTTP-кодов — 200 OK, 404 Not Found, 500 Internal Server Error и другие.

  4. Особенности работы с безопасными соединениями HTTPS.

HTTP используется в различных технологиях и языках программирования. Его применяют в веб-разработке для отправки запросов к серверу и получения данных. Также протокол участвует в работе с REST API — для отправки запросов на получение или изменения данных с сервера.

Как ещё разработчик применяет HTTP:

  1. Использование HTTP-библиотек: многие языки программирования, например, Java, JavaScript и другие, имеют библиотеки, которые позволяют легко отправлять HTTP-запросы и обрабатывать ответы.
  2. Использование API: многие сайты и службы предоставляют API, которые позволяют получать данные из их систем через HTTP-запросы.

Прокачать свои знания о протоколах можно на курсе «Протоколы и сети: основы».


«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

ТелеграмПодкастБесплатные учебники

Читать дальше

Массивы в PHP

Массивы в PHP

Массив — это ещё один тип данных, вроде числа или строки. Главное отличие массива от остальных типов данных заключается в его способности хранить в переменной больше одного значения. В предыдущих примерах имя переменной всегда ассоциировалось только с одним значением:

  • $name = "Иннокентий"
  • $age = 42

А если мы хотим узнать не только пол, имя и возраст пользователя, но и, допустим, любимые сериалы? Очень непросто назвать один самый любимый сериал, а вот вспомнить несколько — намного легче. Сохранение в переменную-массив нескольких значений выглядит так:

 $fav_shows = ["game of thrones", "american horror story", "walking dead"];

В этом примере мы сохранили в переменной $fav_shows сразу три значения. Но сохранить эти данные — это только половина дела. Как с ними потом работать? Уже знакомый вам способ вывода переменной на экран не будет работать с массивами:

<?php
print("Мои любимые сериалы: " . $fav_shows);

Так увидеть список любимых сериалов не получится. Дело в том, что массив — это не обычная переменная. Массив хранит не простые типы, вроде текста или чисел (их ещё называют «скалярными типами»), а более сложную структуру данных, поэтому здесь нужен особый подход.

Внутри массива у каждого значения есть адрес, по которому к нему можно обратиться. Такой адрес называется индексом. Индекс — это просто порядковый номер значения внутри массива. Индексация начинается с нуля, так что первый элемент получает индекс — 0, второй — 1, и так далее.

Чтобы получить определенный элемент массива, необходимо знать его индекс (ключ). Напечатаем названия всех сериалов из массива через запятую:

<?php
print("Мои любимые сериалы: " . $fav_shows[0] . ", " . $fav_shows[1] . ", " . $fav_shows[2]);?>

Теперь можно дать определение массива: Массив — это совокупность множества элементов вида «ключ: значение».

Массивы позволяют перезаписывать существующие значения и добавлять новые. Добавить новое значение в массив можно так:

$fav_shows[] = "the big bang theory";

Новый элемент автоматически получит индекс равный максимальному индексу из существующих + 1. «Теория большого взрыва» сохранится в массиве под индексом 3.

Если нам перестал нравиться один из сериалов, так как новый сезон оказался очень плох или появился новый фаворит, значения в массиве можно заменить. Чтобы вычеркнуть старое значение и заменить его новым, нужно присвоить новое значение любому из существующих в массиве индексов:

$fav_shows[4] = "fargo";

Для полного удаления (без замены на другое) значения по его индексу существует функция unset:

unset($fav_shows[4]);
Читать дальше
  • 10 ноября 2022
Синтаксис PHP

Синтаксис PHP

Разберёмся, из чего состоит любой язык программирования.

У каждого языка есть правила и конструкции, следуя которым мы выражаем мысли и делаем их понятными для другого человека. В программировании всё точно так же. Но вместо человеческого языка мы используем язык программирования PHP, а в роли нашего собеседника выступает PHP-интерпретатор. Поэтому, чтобы выразить свою мысль, мы должны сделать её понятной для интерпретатора.

Читать дальше
  • 27 октября 2022
Массивы $_POST и $_GET в PHP. Обработка форм

Массивы $_POST и $_GET в PHP. Обработка форм

Формы — это часть языка HTML. Формы нужны для передачи данных от клиента на сервер. Чаще всего формы используются для регистрации пользователей, заполнения анкет, оформления заказа в интернет магазине, и так далее.

Через формы можно отправлять как простую текстовую информацию, так и файлы.

Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.

HTML описывает то, из каких элементов состоит форма, и как она выглядит. Но без принимающей стороны, то есть сервера, который принимает эти данные и обрабатывает их нужным образом, создавать формы нет никакого смысла.

PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:

  • Регистрация и аутентификация пользователя;
  • Отправка комментариев на форумах и социальных сетях;
  • Оформление заказов.

Практически любой современный сайт содержит как минимум несколько разных HTML-форм.

Читать дальше
  • 20 октября 2022
Учебник по PHP

Учебник по PHP

  1. Знакомство с языком
  2. Шаблонизация и подключение файлов
  3. Протокол HTTP и формы
  4. Идентификация пользователя на сайте
  5. Базы данных
  6. Объекты и использование библиотек
  • 10 сентября 2022
Протокол HTTP и работа с заголовками

Протокол HTTP и работа с заголовками

Весь современный веб построен на модели взаимодействия клиента и сервера. Как она работает:

  • браузер пользователя (клиент) отправляет на сервер запрос с адресом сайта (URL);
  • сервер получает запрос и отдаёт клиенту запрошенный контент.

Для реализации процесса используется универсальный протокол HTTP.

Читать дальше
  • 10 сентября 2022
Защита от SQL-инъекций

Защита от SQL-инъекций

Внедрение SQL-кода (SQL инъекция) — один из распространённых способов взлома сайтов, работающих с базами данных. Способ основан на внедрении в запрос произвольного SQL-кода. Внедрение SQL позволяет хакеру выполнить произвольный запрос к базе данных (прочитать содержимое любых таблиц, удалить, изменить или добавить данные).

Атака этого типа возможна, когда недостаточно фильтруются входные данные при использовании в SQL-запросах.

Читать дальше
  • 10 сентября 2022
Объекты и классы в PHP

Объекты и классы в PHP

Объекты в PHP — это просто ещё один тип данных. Объект позволяет хранить в переменной набор из свойств и их значений, а также встроенные функции. Это делает объекты похожими по своей структуре на ассоциативные массивы. Но отличие от массивов всё-таки есть, и при этом достаточно важное — объекты могут иметь внутреннее состояние.

Читать дальше
  • 10 сентября 2022
Циклы в PHP. Краткое руководство

Циклы в PHP. Краткое руководство

Цикл — это конструкция языка, которая выполняет блок кода больше одного раза.

Мы привыкли, что сценарии выполняются линейно: сверху вниз, строчка за строчкой. Но что делать, если надо повторить какую-нибудь инструкцию несколько раз? Например, как вывести на экран натуральные числа от 1 до 9?

Есть очевидный способ:

<?php
print(1);
print(2);
print(3);
// и так далее...

Но он заставляет писать много кода. И что если требуется вывести последовательность из миллиона чисел? Ещё бывают ситуации, когда заранее неизвестно сколько раз нужно выполнить определённую инструкцию.

Использование циклов значительно упрощает и укорачивает код. Циклы незаменимы в ситуациях, когда заранее неизвестно сколько раз должен выполниться блок кода. Такое число зависит от множества условий и вычисляется в момент выполнения сценария.

Так выглядит цикл в PHP:

<?php
while (<условие цикла>) {
<тело цикла>
}
Читать дальше
  • 10 сентября 2022