Uploaded by annasokolovskaya68

Структура протокола HTTP

advertisement
МОДУЛЬ 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 Александра Грижневича
Download