Как работает HTTP — практическое объяснение

Как работает HTTP — практическое объяснение

22 марта 2023 г.

HTTP — это протокол прикладного уровня, работающий поверх TCP/IP и широко используемый в Интернете для доступа к веб-сайтам. Это текстовый протокол до версии 2, когда впервые была представлена ​​двоичная версия. Понимание HTTP на базовом уровне имеет решающее значение как для внутренних, так и для внешних разработчиков программного обеспечения. Вот краткое объяснение того, как работает HTTP.

Что такое TCP/IP

IP (Интернет-протокол) – это сетевой протокол, используемый для адресации и маршрутизации пакетов данных по сети. IP-адрес — это уникальный 32-битный идентификатор хоста, который позволяет обращаться к хосту. Обычно он записывается в виде четырех октетов, разделенных точкой. Вот IP-адрес моего сайта:

80.87.97.149

:::информация Сейчас есть две версии IP: IPv4 (32-битный адрес) и IPv6 (128-битный адрес). Для простоты я пропущу IPv6 и сосредоточусь на IPv4.

:::

TCP (Transport Control Protocol) — это транспортный протокол с контролем доставки. На практике это означает, что доставка данных получателю контролируется протоколом. Вместе TCP/IP образуют набор интернет-протоколов и, как следует из названия, являются основным протоколом в Интернете.

HTTP-поток

Что происходит, когда вы нажимаете ссылку в браузере? Во-первых, браузер запрашивает DNS для разрешения IP-адреса из доменного имени. Во-вторых, он устанавливает TCP-соединение с разрешенным IP-адресом. Затем он отправляет HTTP-запрос, который представляет собой простое текстовое сообщение, заканчивающееся двумя CRLF. Браузер ждет, пока не получит ответ HTTP, который снова является текстовым сообщением, заканчивающимся двумя CRLF.

HTTP — это клиент-серверный протокол, но IP-адрес, к которому подключается браузер, не обязательно является веб-сервером. Это может быть прокси-сервер, балансировщик нагрузки или CDN-сервер. Сам веб-сервер также может действовать как прокси, когда он обслуживает динамический контент. В этом случае HTTP-запрос передается базовому серверному приложению.

HTTP flow diagram

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

Если вы посмотрите на HTTP-запрос, вы можете заметить закономерность. Первая строка HTTP-запроса отличается, но остальные строки похожи. Вот пример:

HTTP request structure

Первая строка состоит из метода, за которым следует путь и протокол. Остальные являются заголовками, и большинство из них являются необязательными. На самом деле, некоторые веб-серверы даже позволяют пропустить заголовок Host.

Структура ответа HTTP

Первая строка состоит из протокола HTTP, за которым следует код состояния и сообщение о состоянии. Следующие строки представляют собой заголовки, отделенные от тела двумя CRLF. Само тело завершается двумя другими CRLF.

HTTP response structure

Попробуйте

Вы можете использовать telnet для отправки HTTP-запроса на сервер. Сначала разрешите IP-адрес из доменного имени:

$ dig atabakoff.com

;; ANSWER SECTION:
atabakoff.com.      300 IN  A   80.87.97.149

Затем запустите telnet и откройте соединение с IP-адресом, который мы разрешили на порту 80:

$ telnet
telnet> open 80.87.97.149 80
Trying 80.87.97.149...
Connected to 80.87.97.149.
Escape character is '^]'.

Теперь вы можете делать HTTP-запросы, давайте просто GET главную страницу:

GET / HTTP/1.1
Host: atabakoff.com
User-Agent: ziccurat

HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0 (Ubuntu)
Date: Fri, 17 Mar 2023 17:49:08 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://atabakoff.com/

Код ответа 301 связан с тем, что мой веб-сервер настроен на перенаправление в зашифрованное местоположение HTTPS. Telnet можно использовать только для чистого HTTP, но мы можем использовать и другие инструменты, такие как CURL.

CURL для выполнения HTTP-запроса

CURL — это и библиотека, и инструмент командной строки. Как библиотека, она имеет привязки для нескольких языков и, возможно, является наиболее широко используемой библиотекой HTTP.

В качестве инструмента командной строки вы можете использовать curl для быстрой загрузки файлов и проверки подключения к сайту или API. Это удобный инструмент для написания скриптов автоматизации, и я покажу несколько фрагментов, которые часто использую.

Загрузить файл с помощью CURL

$ curl -L https://github.com/yt-dlp/yt-dlp/releases/download/2023.03.04/yt-dlp_linux -o yt-dlp
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 27.9M  100 27.9M    0     0  10.0M      0  0:00:02  0:00:02 --:--:-- 11.0M

:::информация Опция -L предназначена для перенаправления, а -o — для указания имени файла. По умолчанию curl не выполняет перенаправления и автоматически завершается. Для отладки используйте параметр -v, который говорит, что он должен быть подробным.

:::

Узнайте свой IP-адрес в Интернете

$ curl httpbin.org/ip
{
  "origin": "217.231.24.43"
}

Заключение

HTTP — это основной прикладной протокол Интернета, и его понимание может быть полезным даже на уровне пользователя. Форма не работает, и вы понятия не имеете, почему? Нажмите F12, откройте вкладку Сеть и увидите, что сервер возвращает ошибку, которая никогда не отображается вам. Теперь у вас есть ценная информация, чтобы связаться со службой поддержки или понять, что вам нужно всего лишь подождать минуту.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE