itmo_conspects

Web-разработка: Backend

Лекция 1. Введение

Как ранее обсуждалось на курсе фронтенд-разработки, сейчас документный обмен через сеть Интернет преимущественно с помощью веб-технологий

Так браузер на компьютере клиента, используя URL, посылает запрос по HTTP-протоколу на сервер, который отвечает набором файлов, которые задает веб-страницу с помощью языков HTML, CSS и JavaScript

Все ресурсы веб-сайтов делятся на два типа:

Работа веб-сети основана на пяти ключевых стандартах:

  1. URL - способ задания адресов ресурсов сети
  2. HTTP - протокол взаимодействия между клиентами и серверами
  3. HTML - язык описания гипертекстовых документов
  4. CSS - язык форматирования гипертекстовых документов
  5. JavaScript - язык описания программ, выполняемых на стороне клиента

Протокол HTTP (HyperText Transfer Protocol, Протокол передачи гипертекста) является ключевым участником взаимодействия всех участников веб-сети

Протокол HTTP:

Веб-серверы ещё называют HTTP-серверами, браузеры - HTTP-клиентами, но клиентами могут быть и другие программы: прокси-серверы, поисковые агенты и тому подобное

HTTP работает по принципу запрос-ответ (Request-Response): клиент отправляет запрос, сервер возвращает ответ

HTTP-запрос имеет такую структуру:

МЕТОД /[имя-ресурса][?параметры-запроса] HTTP/номер-версии
Имя-заголовка-1: значение
Имя-заголовка-2: значение

[тело запроса, может отсутствовать]

Здесь:

Пример запроса (здесь разрывы строки обозначены \r\n):

GET / HTTP/1.1\r\n
Host: httpforever.com\r\n
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.0.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: ru\r\n
\r\n

Запрос пишется в текстовом формате, причем конец блока заголовков обозначается последовательностью \r\n\r\n. Запрос также содержит информацию о клиенте - его операционную систему (здесь это 64-битная Windows 10/11), его браузер (здесь это Microsoft Edge на базе Chromium), движок рендера (здесь это AppleWebKit), и принимаемые кодировки (например, можно заархивировать контент), форматы документов и язык контента

Некоторые строки пишутся для соблюдения совместимости. Например, Mozilla/5.0 отправляется потому, что серверы отдавали расширенный контент только браузерам Mozilla


HTTP-ответ выглядит так:

HTTP/1.1 200 OK\r\n
Server: nginx/1.18.0 (Ubuntu)\r\n
Date: Sun, 08 Mar 2026 15:13:19 GMT\r\n
Content-Type: text/html\r\n
Last-Modified: Wed, 22 Mar 2023 14:54:48 GMT\r\n
Transfer-Encoding: chunked\r\n
Connection: keep-alive\r\n
ETag: W/"641b16b8-1404"\r\n
Referrer-Policy: strict-origin-when-cross-origin\r\n
X-Content-Type-Options: nosniff\r\n
Feature-Policy: accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'\r\n
Content-Security-Policy: default-src 'self'; script-src cdnjs.cloudflare.com 'self' 'report-sha256'; style-src cdnjs.cloudflare.com 'self' fonts.googleapis.com 'unsafe-inline'; font-src fonts.googleapis.com fonts.gstatic.com cdnjs.cloudflare.com; frame-ancestors 'none'; report-uri https://scotthelme.report-uri.com/r/d/csp/enforce
Content-Encoding: gzip\r\n
\r\n
[[HTML-документ]]

Здесь содержится информация о типе контента, сервере (nginx/1.18.0 (Ubuntu)), нужных для сайту разрешений браузера (например, геолокация - geolocation 'none')

Первая строка HTTP-ответа содержит трёхзначный код состояния, который сообщает клиенту о результате обработки запроса. Коды делятся на пять категорий:


Помимо информации в URL и теле запроса также есть заголовки - метаданные HTTP-сообщений. Они позволяют управлять сессиями, кэшированием, аутентификацией и авторизацией. Заголовки делятся на четыре группы:


Для работы веб-приложения нужен веб-сервер - серверная программа, работающая в фоновом режиме, которая принимает HTTP-запросы от клиентов и возвращает HTTP-ответы (обычно HTML-документы)

Современные веб-серверы состоят из модулей, каждый из которых отвечает за свою задачу:

  1. Модуль разрешения запроса (или роутер, Router)
    • Определяет тип контента: статический или динамический
    • Преобразует URL-адрес в реальный путь в файловой системе
    • Проверяет аутентификацию для защищённых ресурсов
  2. Модуль обработки запроса
    • Обрабатывает статический контент (отдаёт файлы напрямую)
    • Обрабатывает динамический контент (передаёт запрос на выполнение приложению)
    • Управляет состоянием сеанса, очередями, кэшем
  3. Модуль формирования HTTP-ответа
    • Формирует заголовки ответа
    • Объединяет заголовки с результатом обработки
    • Передаёт ответ клиенту

Важно, что HTTP не поддерживает состояние сеанса. Вся информация о запросе содержится только в самом запросе (заголовках и теле)


Веб-сервер, как программе, нужно оборудование, на котором он будет работать. В качестве такого оборудования, где веб-сервер может хоститься (от host) могут выступать:

Рассмотрим платформу Render, основанную в 2018 году. Render позиционируется как современная замена Heroku и поддерживает Node.js, Python, Go, Ruby, Java, PHP и другие языки

Render используется для:

Приложения запускаются в изолированных контейнерах, при этом одно приложение может использоваться несколькими контейнерами, что обеспечивает лёгкое масштабирование