МОДУЛЬ 2. СТРУКТУРА СООБЩЕНИЙ HTTP. МЕХАНИЗМЫ АУТЕНТИФИКАЦИИ И АВТОРИЗАЦИИ УРОК 2.1 СТРУКТУРА ПРОТОКОЛА HTTP ЧАСТЬ 2 Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ЦЕЛИ УРОКА Изучить клиент-серверную архитектуру системы (часть 1) Разобраться в структуре протокола НТТР (часть 2) Научиться использовать командную строку для создания запросов НТТР (часть 2) Изучить различие протокола НТТР и HTTPS (часть 2) Изучить коды состояний HTTP протокола (часть 2) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ЧТО ТАКОЕ ПРОТОКОЛ HTTP? HTTP (HyperText Transfer Protocol) - это протокол, позволяющий получать различные ресурсы, например HTML-документы в сети. HTTP (HyperText Transfer Protocol) - символьно-ориентированный клиентсерверный протокол прикладного уровня без сохранения состояния, используемый сервисом world wide web (www). НТТР - это прикладной протокол в рамках модели сети OSI (7 уровней) Протокол НТТР лежит в основе обмена данными в Интернете. НТТР является протоколом клиент-серверного взаимодействия 1. Клиентское приложение формирует запрос (Request) и отправляет его на сервер 2. Серверное программное обеспечение обрабатывает данный запрос, формирует ответ (Response) и передаёт его обратно клиенту 3. Клиентское приложение может продолжить (продолжает) отправлять другие запросы, которые будут обработаны аналогичным образом Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ПРИМЕР ЗАПРОСА 1. Client 1 хочет направить сообщение Client 2 через Facebook 2. Client 1 открывает Facebook и пишет сообщение, нажимает кнопку «Отправить» 3. Браузер упаковывает сообщение Client 1 в промежуточный формат (например, json) и посылает на сервер в виде РОЅT сообщения (с помощью метода POST) 4. Если всё прошло удачно, то сервер Facebook в ответ присылает сообщение с кодом 201 (CREATED) 5. Client 2 открывает Facebook 6. Браузер (на Client 2) послал на сервер GET запрос (метод GET). Сервер, на который Client 1 уже послал своё приглашение, видит, что Client 2 проверяет свои входящие, и отвечает на запрос сообщением, содержащим код 200 (ОК) 7. Любое взаимодействие между сервером и клиентом можно разбить на пары Вопрос-ответ (упрощает взаимодействие с веб-сервисами) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ПРИМЕР ЗАПРОСА. ДИАГРАММА ПОСЛЕДОВАТЕЛЬНОСТИ Client 1 POST /im HTTP/1.1 201 CREATED Facebook Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича GET /im HTTP/1.1 200 OK Client 2 I ПРИМЕР ЗАПРОСА 1 этап. Клиент (браузер) отправляют строку запроса (HTTP-запрос), которая создается по определенным правилам, и запрашивает нужную страницу на сервере. 2 этап. Сервер принимает запрос и ищет у себя эту страницу. По результатам этого поиска создается ответ клиенту (НТТР-ответ). Этот ответ тоже Оформляется по определенным правилам. 1. Если все прошло успешно и страница найдена, то в этом ответе будет передан успешный status code + код нужной веб-страницы + дополнительная служебная информация. 2. Если произошел сбой, то будет передан код ошибки (status code) + дополнительная служебная информация. Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ПРИМЕР ЗАПРОСА Строка запроса НТТР заголовки НТТР запрос Браузер Строка запроса НТТР заголовки НТТР ответ Содержимое страницы Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича Сервер СОСТАВЛЯЮЩИЕ СИСТЕМ, ОСНОВАННЫХ НА HTTP - HTTP - это клиент-серверный протокол, то есть запросы отправляются какой-то одной стороной участником обмена (user-agent) (либо прокси вместо него). Чаще всего в качестве участника выступает веб-браузер, но им может быть кто угодно, например, робот для пополнения и обновления данных индексации вебстраниц для поисковых систем. 1. Каждый запрос (request) отправляется серверу, который обрабатывает его и возвращает ответ (response). 2. Между этими запросами и ответами как правило существуют многочисленные посредники, называемые прокси (proxy), которые выполняют различные операции и работают как шлюзы или кэш Client Proxy Proxy Server Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СОСТАВЛЯЮЩИЕ СИСТЕМ, ОСНОВАННЫХ НА HTTP • Клиент (создаёт запрос) Веб-сервер (обрабатывает запрос) Прокси: caching (кеш может быть публичным или приватными, как кеш браузера) фильтрация (как сканирование антивируса, родительский контроль) выравнивание нагрузки (позволить нескольким серверам обслуживать разные запросы) аутентификация (контролировать доступ к разным ресурсам) протоколирование (разрешение на хранение истории операций) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СЦЕНАРИЙ HTTP ВЗАИМОДЕЙСТВИЯ Когда клиент хочет взаимодействовать с сервером, являющимся конечным сервером или промежуточным прокси, он выполняет следующие шаги: 1. Открытие ТСР соединения: ТСР-соединение будет использоваться для отправки запроса (или запросов) и получения ответа. Клиент может открыть новое соединение, переиспользовать существующее или открыть несколько ТСР-соединений к серверу. 2. Отправка НТТР-сообщения • GET / HTTP/1.1 Host: developer.mozilla.org 3. Читает ответ от сервера HTTP/1.1 200 OK • Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache • Last-Modified: Tue, 20 Feb 2022 20:18:22 GMT • Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (here comes the 29769 bytes of the requested web page) 4. Закрывает или переиспользует соединение для дальнейших запросов Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича HTTP СООБЩЕНИЯ НТТР сообщения - это обмен данными между сервером и клиентом. Есть два типа сообщений: • запросы, отправляемые клиентом, чтобы инициировать реакцию со стороны сервера • ответы от сервера Важно! Сообщения НТТР состоят из текстовой информации в кодировке ASCII, записанной в несколько строк. Важно! Разработчики не создают текстовые сообщения HTTP самостоятельно НТТР это делает программа, браузер, прокси или веб-сервер. Они обеспечивают создание НТТР сообщений через конфигурационные файлы (для прокси и серверов), АPIs (для браузеров) или другие интерфейсы. Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СТРУКТУРА HTTP ЗАПРОСОВ И ОТВЕТОВ Стартовая строка (Request/Response), описывающая запрос, или статус (успех или сбой). Это всегда одна строка. Произвольный набор НТТР заголовков (Header), определяющих запрос или описывающих тело сообщения. Пустая строка, указывающая, что вся мета информация отправлена Тело сообщения (Body), содержащее пересылаемые с запросом данные (например, содержимое HTML-формы ) или отправляемый в ответ документ. Наличие тела и его размер определяется стартовой строкой и заголовками НТТР. Стартовая строка (Request/Response) Заголовок (Header) Разделитель (пустая строка) Тело сообщения (Body) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СТАРТОВАЯ СТРОКА ЗАПРОСА Стартовая строка является обязательным элементом, так как указывает на тип запроса/ответа (заголовки и тело сообщения могут отсутствовать) Важно! Стартовые строки различаются для запроса и ответа Состоит: Метод НТТР (Method): глагол (например, GET, PUT или POST) или существительное (например, HEAD или OPTIONS), описывающие требуемое действие. Например, GET указывает, что нужно доставить некоторый ресурс, а РОЅТ означает отправку данных на сервер (для создания или модификации ресурса, или генерации возвращаемого документа). Цель запроса (Path): обычно URL, или абсолютный путь протокола, порт и домен обычно характеризуются контекстом запроса. Путь до конкретного ресурса (документа, объект, файл), над которым необходимо осуществить операцию (index.html). Версия НТТP (Version of protocol), определяющая структуру оставшегося сообщения, указывая, какую версию предполагается использовать для ответа. Версия НТТР определяет версию стандарта НТТР составлен запрос. Указывается как два числа, разделённых точкой (1.1, 2.0) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СТАРТОВАЯ СТРОКА ЗАПРОСА Цель запроса (Path) Метод НТТР (Method) Версия НТТP (Version of protocol) GET / HTTP/1.1 Примеры стартовой строки НТТР запроса: • GET /web-programming HTTP/1.1 или GET / HTTP/1.1 • GET / HTTP/1.1 GET /imessage HTTP/1.1 Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ЗАГОЛОВОК (HEADER) Заголовки запроса НТТР имеют стандартную для заголовка HTTP структуру: не зависящая от регистра строка, завершаемая (':') и значение, структура которого определяется заголовком. Примеры: Date: Sat, 09 Oct 2010 14:28:02 GMT • Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT Важно! Весь заголовок, включая значение, представляет собой одну строку, которая может быть довольно длинной. Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ГРУППЫ ЗАГОЛОВКОВ Основные заголовки (General headers), например, Via (en-US), относящиеся к сообщению в целом • Заголовки запроса (Request headers), например, User-Agent, Accept-Typе, уточняющие запрос (как, например, Аccept-Language), придающие контекст (как Referer), или накладывающие ограничения на условия (like If-None). • Заголовки сущности, например Content-Length, относящиеся к телу сообщения. Как легко понять, они отсутствуют, если у запроса нет тела. POST/ HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (Macintosh;....).... Firefox/51.0 text/html,application/xhtml+xml,..., */*;q=0.8 Accept: Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Content-Туре: multipart/form-data; boundary=-12656974 Content-Length: 345 -12656974 (more data) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича Request headers General headers Entity headers ТЕЛО ЗАПРОСА Тeлo (Body) HTTP/1.1 302 Moved Temporarily Server: nginx Date: Sat, 08 Mar 2014 22:29:53 GMT Content-Type: text/html Content-Length: 154 Connection: keep-alive Keep-Alive: timeout=25 Location: http://habrahabr.ru/users/alizar/ <html> <head><title>302 Found</title> </head> <body bgcolor="white"> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html> Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ПРИМЕР ЗАПРОСА Цель запроса (Path) Метод НТТР (Method) Версия НТТP (Version of protocol) GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr Headers Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ОТВЕТЫ HTTP • Строка статуса (Status line) Заголовки (Headers) • Тело (Body) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СТАРТОВАЯ СТРОКА ОТВЕТА Status Code Версия НТТР (Version of protocol) Status message HTTP/1.1 200 OK Стартовая строка ответа НТТР, называемая строкой статуса, содержит следующую информацию: Версия протокола, обычно HTTP/1.1. Код состояния (status code), показывающая, был ли запрос успешным. Примеры: 200, 404 или 302 Пояснение (status text). Краткое текстовое описание кода состояния, помогающее пользователю понять сообщение НТТР. Пример строки статуса: HTTP/1.1 404 Not Found. Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ЗАГОЛОВОК ОТВЕТА Заголовки ответов НТТР имеют ту же структуру, что и все остальные заголовки: не зависящая от регистра строка, завершаемая двоеточием (':') и значение, структура которого определяется типом заголовка. • Основные заголовки (General headers), например, Via (en-US), относящиеся к сообщению в целом. Заголовки ответа (Response headers), например, Vary и Accept-Ranges, сообщающие дополнительную информацию о сервере, которая не уместилась в строку состояния. • Заголовки сущности (Entity headers), например, Content-Length, относящиеся к телу ответа. Отсутствуют, если у запроса нет тела. HTTP/1.1 200 OK Access-Control-Allow-Origin: Connection: Keep-Alive Content-Encoding: gzip Content-Type: text/html; charset=utf-8 Date: Wed, 10 Aug 2016 13:17:18 GMT Etag: "d9b3b803e9a0dc6f22e2£20a3e90f69c41f6b7lb" Кеер-Alive: timeout=5, max=999 Last-Modified: Wed, 10 Aug 2016 05:38:31 GMT Server: Apache Set-Cookie: csrftoken=...... Transfer-Encoding: chunked Vary: Cookie, Accept-Encoding X-Frame-Options: DENY Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича Response headers Entity headers General headers ТЕЛО ОТВЕТА Последней частью ответа является его тело. Оно есть не у всех ответов: у ответов с кодом состояния, например, 201 или 204, оно обычно отсутствует. Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ПРИМЕР ОТВЕТА Status Code Версия HTTP (Version of protocol) Status message Headers HTTP/1.1 200 OK Date: Sat, 25 Feb 2010... Server: Apache Content-Length: 29796 Content-Type: text/html Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ПРИМЕР ЗАПРОСА - ОТВЕТА Requests POST/ HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (Macintosh;...)... Firefox/51.0 text/html,application/xhtml+xml,.,*/*;q=0.8 Accept: Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Content-Type: multipart/form-data; boundary=-12656974 Connection: keep-alive Upgrade-Insecure-Requests: 1 Content-Length: 345 -12656974 (more data) start- line HTTP headers Responses HTTP/1.1 403 Forbidden Server: Apache Content-Type: text/html; charset=iso-8859-1 Date: Wed, 10 Aug 2016 09:23:25 GMT Keep-Alive: timeout=5, max=1000 Connection: Keep-Alive Age: 3464 Date: Wed, 10 Aug 2016 09:46:25 GMT X-Cache-Info: caching Content-Length: 220 empty line body <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича (more data) HTTP STATUS CODES HTTPS Status Codes - это стандартизированные коды, которые веб-сервер возвращает в ответ на НТТР-запросы сетевых клиентов. Они помогают понять статус: было ли соединение успешным или такой страницы не существует, есть ли перенаправление или превышен таймаут. В настоящее время выделено пять классов кодов состояния (подробное описание в отдельном документе под видео) • 1xx: Informational (Информационные). Информационные коды состояния, сообщающие клиенту, что сервер пребывает в процессе обработки запроса. Реакция клиента на Данные коды не требуется; • 2xx: Success (Успешно). 200 ОК (Хорошо). Появился в HTTP/1.0. Успешный запрос ресурса. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке и/или теле сообщения. • 3хх: Redirection (Перенаправление(переадресация)). Коды класса 3хх сообщают клиенту, что для успешного выполнения операции необходимо сделать другой запрос • 4xx: Client Error (Ошибка клиента). Класс кодов 4хх предназначен для указания ошибок со стороны клиента. При использовании всех методов, кроме HEAD HTTP запрос, сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя. • 404 Not Found (Не найдено). Сервер понял запрос, но не нашёл соответствующего ресурса по указанному адресу • URI. 5xx: Server Error (Ошибка сервера) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СДЕЛАТЬ ЗАПРОС ИЗ КОМАНДНОЙ СТРОКИ Цель: Сделать запрос на ресурс из командной строки на сервер w3schools.com Получить ответ в виде строки ответа и заголовка Убедиться что сервер w3schools.com работает по протоколу НТТР 1.1 Убедиться что сервер w3schools.com доступен (status code = 200 или другой) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича РЕАЛИЗАЦИЯ ЗАПРОСА ИЗ КОМАНДНОЙ СТРОКИ 1. Выполнить команду Win + R и ввести cmd (для Win OS) 2. Ввести команду: curl -I w3schools.com (Используем команду curl (служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL) 3. Дождаться ответа от сервера 4. Убедиться, что НТТР 1.1 и status code = 200 ОК или другой Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича СДЕЛАТЬ ЗАПРОС ИЗ КОМАНДНОЙ СТРОКИ Цель: Сделать запрос на ресурс из командной строки на сервер example.com Получить ответ в виде строки ответа и заголовка Убедиться что сервер еxample.com работает по протоколу НТТР 1.1 Убедиться что сервер example.com доступен (status code = 200 или другой) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича РЕАЛИЗАЦИЯ ЗАПРОСА ИЗ КОМАНДНОЙ СТРОКИ 1. Выполнить команду Win + R и ввести cmd (для Win OS) 2. Ввести команду: curl -l example.com (Используем команду curl (служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL) 3. Дождаться ответа от сервера 4. Убедиться, что НТТР 1.1 и status code = 200 ОК или другой Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича РЕАЛИЗАЦИЯ ЗАПРОСА ИЗ КОМАНДНОЙ СТРОКИ 4. Command Prompt C:\Users\agriz>curl -I example.com HTTP/1.1 200 OK Accept-Ranges: bytes Age: 177991 Cache-Control: max-age=604800 Content-Type: text/html; charset=UTF-8 Date: Mon, 28 Feb 2022 08:17:27 GMT Etag: "3147526947+gzip" Expires: Mon, 07 Mar 2022 08:17:27 GMT Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT Server: ECS (nyb/1D0D) X-Cache: HIT Content-Length: 1256 Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича ПРОТОКОЛЫ HTTP И HTTPS. КЛЮЧЕВЫЕ РАЗЛИЧИЯ 1. В НТТР отсутствует механизм защиты для шифрования данных, в то время как НТТРЅ для защиты связи между сервером и клиентом использует цифровой сертификат SSL или TLS. 1 - 2. НТТР работает на уровне приложения, а HTTPS на транспорном уровне. 3. НТТР по умолчанию работает по 80-ому порту, а HTTPS через 443-му. 4. НТТР передает данные открытым текстом, а HTTPS зашифрованным. 5. НТТР по сравнению с HTTPS работает быстрее, поскольку последнему нужно время для шифрования канала связи. - Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича HTTP. ПРЕИМУЩЕСТВА И НЕДОСТАТКИ Преимущества: 1. НТТР может быть реализован на основе другого протокола в Интернете или в других сетях 2. Страницы HTTP хранятся в кэше компьютера и Интернета, поэтому доступ к ним осуществляется быстрее 3. Не нуждается в поддержке среды выполнения 4. Не ориентирован на подключение; таким образом, отсутствуют накладные расходы на сеть для создания и поддержания состояния сеанса и информации Недостатки: 1. Нет защиты информации, так как любой может прослушать и увидеть передаваемый контент 2. Обеспечение целостности данных является большой проблемой, поскольку есть возможность изменения содержимого на лету во время передачи. 3. Любой, кто перехватит запрос, может получить имя пользователя и пароль. Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича HTTPS. ПРЕИМУЩЕСТВА И НЕДОСТАТКИ Преимущества: 1. В большинстве случаев сайты, работающие по протоколу НТTPS, будут перенаправлены. Поэтому даже если ввести HTTP://, он перенаправит на https через защищенное соединение 2. Это позволяет пользователям выполнять безопасные транзакции электронной коммерции, такие как онлайн-банкинг. 3. Технология SSL защищает всех пользователей и создает доверие 4. Независимый орган проверяет личность владельца сертификата. Таким образом, каждый SSL-сертификат содержит уникальную аутентифицированную информацию о владельце сертификата. Недостатки: 1. Протокол HTTPS не может остановить кражу конфиденциальной информации со страниц, кэшированных в браузере 2. Данные SSL могут быть зашифрованы только во время передачи по сети. Поэтому он не может очистить текст в памяти браузера 3. НТТРЅ ввиду вычислений может увеличить задержки во время передачи данных. Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича УРОК 2.1 ПОДВЕДЕНИЕ ИТОГОВ Изучили клиент-серверную архитектуру (часть 1) • Разобрались в структуре протокола HTTP (часть 2) Научились пользоваться командной строкой для создания запросов HTTP (часть 2) Изучили отличие НТТР и HTTPS протоколы (часть 2) Изучили коды состояний НТТР на клиенте (часть 2) Курс Техническая перезагрузка. Школа Getskills.by Александра Грижневича