Как работает 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-запроса
Если вы посмотрите на HTTP-запрос, вы можете заметить закономерность. Первая строка HTTP-запроса отличается, но остальные строки похожи. Вот пример:
Первая строка состоит из метода, за которым следует путь и протокол. Остальные являются заголовками, и большинство из них являются необязательными. На самом деле, некоторые веб-серверы даже позволяют пропустить заголовок Host
.
Структура ответа HTTP
Первая строка состоит из протокола HTTP, за которым следует код состояния и сообщение о состоянии. Следующие строки представляют собой заголовки, отделенные от тела двумя CRLF
. Само тело завершается двумя другими CRLF
.
Попробуйте
Вы можете использовать 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
, откройте вкладку Сеть
и увидите, что сервер возвращает ошибку, которая никогда не отображается вам. Теперь у вас есть ценная информация, чтобы связаться со службой поддержки или понять, что вам нужно всего лишь подождать минуту.
Оригинал