June 28, 2020

То что нужно знать

Здесь я буду описывать всё что нужно знать мне для моих профессиональных навыков. Когда информации будет много, буду её разбивать по частям и давай ссылки на эти части.

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 заголовки
  • Тело (не обязательно), содержащее пересылаемый ресурс.