HTTP протокол передачи Гипертекста — основа системы WWW
HTTP расшифровывается, как Hypertext Transfer Protocol — протокол передачи гипертекста. Этот протокол являются основой системы world wide web, именно его мы используем, когда просматриваем странички в браузере.
Web придумал Тим Бернерс-Ли, когда работал в ЦЕРН в 1989 году. Кроме протокола HTTP, веб включал язык разметки HTML, Web-сервер и Web-браузер. Веб-браузер ЦЕРН работал в текстовом виде. Вскоре после этого, появились графические веб браузеры, которыми оказалось очень легко пользоваться. Именно благодаря графическим браузерам и вебу интернет стал очень популярен. Сейчас Тим Бернерс-Ли является директором консорциума W3C, которая издает стандарты для World Wide Web.
Гипертекст и HTML
Гипертекст это специальный тип разметки, которую вы добавляйте в текстовые документы, для того чтобы определить, как показывает ту или иную часть текста. В языке HTML для этих целей используются теги.
Например, тег ˂h1˃ говорит, что дальше идет заголовок Протокол HTTP и закрывающийся тег ˂h1˃ заголовок закончился. Тег ˂u1˃ означает список, а ˂li˃ элемент списка.
Вот как этот гипертекстовый HTML документ показывает браузер.
Заголовок Протокол HTTP . Обычный текст, который был указан без разметки “ Тим Бернер-Ли в ЦЕРН предложил концепцию Web в 1989 году ”. И список.
URL — уникальное положение ресурса
Большую роль в работе web и http играет URL (Uniform Resource Locator) — уникальное положение ресурса, по-русски его часто называют ссылка. Это уникальный адрес веб-страницы в интернете.
Рассмотрим, как устроены ссылки. Например, https://www.zvondozvon.ru/tehnologii/protokoli . Сначала идет название протокола, в нашем случае https . Затем :// и доменное имя сервера www.zvondozvon.ru на котором размещена страница, либо здесь может находиться IP-адрес сервера. После этого через слеш указывается имя конкретной страницы, которую мы хотим загрузить /tehnologii/protokoli .
URL рассчитаны не только на работу с http и html, но и например с другими протоколами, можно указать защищенный протокол https или протокол ftp . Также не обязательно использовать гипертекст, на веб-серверах могут размещаться обычные текстовые страницы.
Место протокола HTTP в стеке протоколов TCP/IP
Протокол http находятся на прикладном уровне в стеке протоколов TCP/IP .
Он использует протокол транспортного уровня TCP, веб-сервер работает на 80 порту для клиента номер порта генерируются автоматически операционной системой. HTTP работает в режиме запрос-ответ. Клиент пересылают серверу запрос на передачу веб-страницы и сервер в ответ эту веб-страницу пересылает.
В отличии от некоторых других протоколов, которые были рассмотрены ранее на сайте в разделе протоколы в HTTP, нет какого-то жестко заданного формата пакетов, используется обычный текстовый режим.
Версии протокола HTTP
Есть несколько версий протокола HTTP. Первая, экспериментальная версия HTTP 0.9 была разработана в ЦЕРН в 1991 году. Первая официальная версия HTTP 1.0 была принята в качестве стандарта в 1996 году и почти сразу же после этого в 1997 году была принята расширенная версия протокола HTTP 1.1. Именно эта версия используется до сих пор. В 2015 году появилась новая версия протокола HTTP 2 сейчас эта версия только вводится в эксплуатацию она поддерживается еще не всеми браузерами и не всеми веб-серверами.
Структура пакета HTTP
Пакет HTTP состоит из 3 частей. Первая часть это запрос, либо со стороны клиента, либо от статус ответа со стороны сервера. Например, запрос GET означает, что клиент просит передать ему web-страницу, которая находится на сервере вот по такому пути GET /tehnologii/protokoli в ответ сервер пересылает статус выполнения операции код и символьное сообщение, например 200 OK. Это означает, что страница нашлась на сервере и сервер передает ее в теле сообщения.
Затем могут идти и заголовки, которых может быть несколько. В версии HTTP 1.0 заголовки были не обязательны, но в версии HTTP 1.1 в запросе обязательно использовать заголовок Host:www.zvondozvon.ru, где указываются доменное имя сервера, у которого вы хотите запросить веб-страницу. Это сделано из-за того, что на одном и том же IP-адресе, может работать несколько веб-сайтов и в web серверу необходимо знать с какого сайта вы хотите загрузить страницу.
Также могут быть другие заголовки, например тип передаваемого сообщения в примере Content-Type: text/html; charset=UTF-8, размер передаваемого сообщения Content-Length: 5161 байт.
И затем может идти тело сообщения в котором передается запрашиваемая веб-страница или передаются какие-то параметры на сервер. Тело сообщения является необязательным например, в запросе клиента на передачу веб-страницы с сервера тело не нужно.
Методы HTML
Клиент при обращении к серверу в запросе указывает метод, который он хочет использовать.
- Самые популярные методы это GET запрос на передачу веб-страницы, именно этот запрос используются чаще всего.
- POST передача данных на веб-сервер для обработки. Метод post используется например, когда вы пишите комментарии к роликам youtube, остальные методы, кроме get и post используются значительно реже.
- Метод HEAD запрашивает заголовок страницы, то же самое, что и GET только без тела сообщения, хотя HTTP разрабатывался для передачи веб-страниц, создатели HTTP предусмотрели возможность его использования для работы с ресурсами других типов.
- Метод PUT помещение ресурса на веб-сервер.
- Метод DELETE удаление страницы или ресурса с веб-сервера для выполнения этих методов необходимо иметь соответствующие права доступа.
- Метод TRACE позволяет отслеживать, что происходит со страницей, кто вносит в нее какие изменения.
- Метод OPTIONS позволяет узнать, какие именно методы поддерживаются для конкретного ресурса на веб-сервере.
- Метод CONNECT позволяет подключиться к веб-серверу через прокси.
Статусы HTTP
В ответе сервера первое поле это статус обработки запроса, статусы сгруппированы в пять групп и для каждой группы используется код статуса состоящий из трехзначного числа.
- Статусы, которые начинаются на единицу (1ХХ), используются для передачи информационных сообщений.
- Статусы, которые начинаются на двойку (2ХХ), говорят о том, что запрос выполнен успешно, например наиболее популярный статус (200 OK), означает что страница найдена и она передается клиенту.
- Статусы, которые начинаются на тройку (3ХХ), говорят о перенаправлении, например статус 301 — постоянное перенаправление, говорит о том что страница была перемещена на другой адрес и все последующие запросы должны передаваться на этот новый адрес. Статус 307 тоже говорит о перенаправлении, но временном, сейчас доступ к странице можно получить по другому адресу, но через некоторое время необходимо снова обращаться к исходному адресу.
- Статусы, которые начинаются с четверки (4ХХ), говоря о том, что произошла какая-то ошибка на стороне клиента. Чаще всего встречается ошибка 404 — страница, которую запросил клиент не найдена на сервере. Также возможна ошибка 403 доступ к ресурсу, который запросил клиент запрещен и другие ошибки.
- Статусы начинающиеся на пять (5ХХ) говорят об ошибке на стороне сервера, например 500 — внутренняя ошибка сервера.
Пример запроса HTTP
Рассмотрим примеры запроса и ответа HTTP.
Подключение по TCP к серверу www.zvondozvon.ru, порт 80.
————————————————
GET /tehnologii/protokoli HTTP 1.1
Host: www.zvondozvon.ru
HTTP работают в текстовом режиме, нам необходимо подключиться к веб-серверу, например www.zvondozvon.ru к порту 80 по протоколу TCP. Дальше мы пишем запрос, используем метод GET хотим получить ресурс /tehnologii/protokoli и указываем версию протокола по которой мы хотим работать HTTP 1.1. Так как мы используем версию 1.1 нам необходимо указать заголовок host, доменное имя сервера с которым мы работаем www.zvondozvon.ru , этого вполне достаточно для того чтобы веб-сервер нам ответил.
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=UTF-8
Content-Length: 5161
˂html lang=”ru-RU”˃
˂head˃
…
˂/html˃
Ответ веб-сервера начинается со статуса 200 ok, обработка запроса произошла успешно, также вначале указываются версия протокола, которая используется HTTP 1.1. Затем идут несколько заголовков реализации веб-сервера nginx, тип передаваемой страницы текста html кодировка utf-8, длина страницы 5161 байт, также здесь могут идти другие заголовки, которые вам передал сервер.
Затем идет пустая строка и код веб-страницы. После передачи web страницы, соединение tcp разрывается, можно оставить соединение открытым для последующей работы, но для этого необходимо использовать дополнительный заголовок.
p, blockquote 29,0,0,0,0 —> p, blockquote 30,0,0,0,1 —>