То что нужно знать
Здесь я буду описывать всё что нужно знать мне для моих профессиональных навыков. Когда информации будет много, буду её разбивать по частям и давай ссылки на эти части.
HTTP
Обзор протокола HTTP
https://developer.mozilla.org/ru/docs/Web/HTTP/Overview
А тут я в сжатой форме опишу суть
HTTP:
- создан в 1990 году
- позволяющий получать различные ресурсы
- лежит в основе обмена данными в Интернете
- является протоколом прикладного уровня, который чаще всего использует возможности другого протокола TCP
- может быть использован для получения только частей документа (AJAX)
- является протоколом клиент-серверного взаимодействия - это значит запросы отправляются какой-то одной стороной ( чаще всего это браузер, но может быть что угодно )
Полученный документ состоит из поддокументов ( текст, структура, изображения, видео, скрипты и т.д )
Клиент и сервер общаются с помощью одиночных сообщений ( а не потоком данных ).
Сообщение от клиента наз. запрос
Сообщение от сервера наз. ответ
Составляющие систем, основанных на HTTP
Между клиентом и сервером есть посредники ( маршрутизаторы, модемы и т.д )
Сеть состоит из нескольких уровней ( своёв ). Посредники спрятаны на сетевом и транспортном уровнях. HTTP имеет самый высокий уровень, называемый "Прикладным".
Клиент: участник обмена
Участник обмена (user agent) — это любой инструмент или устройство, действующие от лица пользователя.
Браузер всегда является той сущностью, которая создаёт запрос.
Описание того, что делает браузер, чтобы отобразить страницу:
- Отправляет для получения html-документа
- Просматривает этот html-документ и видит что нужно ещё подгрузить ( стили, картинки, шрифты и т.д )
- Соединяет всё вместе и показывает единую веб-страницу
Веб-страница - это гипертекстовый документ.
Гипертекстовый документ - это означает что в этом документе есть ссылки.
Браузер преобразует эти гиперссылки в HTTP-запросы и таким образом ходит по страницам.
Веб-сервер
Сервер обслуживает пользователя.
Сервер не обязательно расположен на одной машине, и наоборот ->
несколько серверов могут быть расположены (хоститься) на одной и той же машине.
Прокси
Сетевые узлы, которые находятся между клиентом и сервером, обычно, работают на транспортном сетевом или физическом уровнях. Когда они доходят до прикладного уровня ( http уровня ), происходит какая-то движуха называемая прокси.
Функции, которые выполняют прокси:
- caching (кеш может быть публичным или приватными, как кеш браузера)
- фильтрация (как сканирование антивируса, родительский контроль, …)
- выравнивание нагрузки (позволить нескольким серверам обслуживать разные запросы)
- аутентификация (контролировать доступом к разным ресурсам)
- протоколирование (разрешение на хранение истории операций)
Основные аспекты HTTP
HTTP - прост
Его легко читать, понимать и тестировать.
HTTP - расширяемый
Протокол легок для расширения и экспериментирования. Новая функциональность может быть даже введена простым соглашением между клиентом и сервером о семантике нового заголовка.
HTTP не имеет состояния, но имеет сессию
Простыми словами, каждый запрос в одном соединении, уникален. Но состояние хранить всё таки нужно, например, состояние того, авторизован пользователь или нет. На помощь приходят куки. Куки юзают сессии с сохранным состоянием. И при каждом запросе, куки добавляются к рабочему потоку и бла бла бла, чего я не понял....
HTTP и соединения
Соединение управляется на транспортном уровне.
HTTP полагается на стандарт TCP.
HTTP поток
Что произодит, когда клиент взаимодействует с сервером.
- Открывается TCP соединение.
- Отправляется HTTP-сообщение.
- Читает ответ от сервера.
- Закрываем или переиспользуется соединение для дальнейших запросов.
HTTP сообщения
HTTP-сообщения версии HTTP/1.1 человеко-читаемы. В версии HTTP/2 уже нет, там применяется бинарная структура ( фрейм ), служит она для оптимизации.
Есть 2 типа HTTP сообщений:
- запросы
- ответы
у каждого свой формат.
Запросы
Запросы содержат следующие элементы:
- HTTP-метод ( GET, POST и т.д ) определяющее операцию, которую клиент хочет выполнить.
- Путь к ресурсу ( протокол, домен и порт )
- Версию HTTP-протокола.
- Заголовки ( не обязательно ) там доп инфа для сервера содержится
- Тело для таких методов как
POST
Ответы
Ответы содержат следующие элементы:
- Версию HTTP-протокола.
- HTTP код состояния ( 404, 200 т.д )
- Сообщение состояния
- HTTP заголовки
- Тело (не обязательно), содержащее пересылаемый ресурс.