Skip to content

🌐 HTTP и HTTPS

1. Что такое HTTP?

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

HTTP — это безопасный, но незащищённый протокол передачи данных. Он не шифрует данные, поэтому может быть перехвачен третьими лицами.


2. Что такое HTTPS?

HTTPS (HyperText Transfer Protocol Secure) — это безопасная версия HTTP, в которой данные шифруются с помощью SSL/TLS, чтобы защитить конфиденциальность и целостность информации.

🔒 Отличие HTTPS от HTTP:

Характеристика HTTP HTTPS
Шифрование Нет Да
Порт 80 443
Сертификат Не требуется Обязателен
Безопасность Низкая Высокая

3. Как работает HTTP/HTTPS?

🔄 Процесс HTTP-запроса:

  1. Клиент (браузер) отправляет HTTP-запрос на сервер.
  2. Сервер получает запрос, обрабатывает его и отправляет HTTP-ответ.
  3. Браузер получает ответ (HTML, JSON и т.д.) и отображает содержимое.

Пример HTTP-запроса:

GET /index.html HTTP/1.1
Host: example.com

Пример HTTP-ответа:

HTTP/1.1 200 OK
Content-Type: text/html

<!DOCTYPE html>
<html><body>Hello World</body></html>

🔐 Процесс HTTPS-запроса:

  1. Устанавливается TLS-соединение (шифрованный канал).
  2. Сервер представляет свой SSL-сертификат.
  3. После проверки сертификата, устанавливается защищённое соединение.
  4. Далее происходит обычный HTTP-обмен данными, но уже через защищённый канал.

4. Методы HTTP-запросов

Метод Описание
GET Запрашивает данные с сервера. Данные передаются в URL (query string).
POST Отправляет данные на сервер для создания/обновления ресурса. Данные передаются в теле запроса.
PUT Обновляет существующий ресурс или создаёт новый, если он не существует.
DELETE Удаляет указанный ресурс.
PATCH Частично обновляет ресурс.
HEAD То же самое, что GET, но без тела ответа (только заголовки).
OPTIONS Возвращает поддерживаемые методы для указанного ресурса.

5. Статус-коды HTTP

Статус-коды — это числа, которые сервер возвращает в ответе, чтобы показать результат выполнения запроса.

Группа Описание
1xx (Informational) Запрос принят, продолжение процесса.
2xx (Success) Запрос успешно обработан. Пример: 200 OK.
3xx (Redirection) Требуется дополнительное действие. Пример: 301 Moved Permanently.
4xx (Client Error) Ошибка на стороне клиента. Пример: 404 Not Found, 403 Forbidden.
5xx (Server Error) Ошибка на стороне сервера. Пример: 500 Internal Server Error.

Распространённые статус-коды:

Код Сообщение Описание
200 OK Запрос выполнен успешно
201 Created Ресурс создан
301 Moved Permanently Постоянно перемещён
302 Found Временно перемещён
400 Bad Request Неверный запрос
401 Unauthorized Неавторизован
403 Forbidden Доступ запрещён
404 Not Found Ресурс не найден
500 Internal Server Error Внутренняя ошибка сервера
502 Bad Gateway Неверный ответ от upstream-сервера
503 Service Unavailable Сервис временно недоступен

6. Заголовки HTTP

Заголовки — это метаданные, передаваемые в запросе или ответе. Они содержат информацию о клиенте, сервере, типе данных, кэшировании и т.д.

Примеры заголовков:

В запросе:

GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Authorization: Bearer <token>

В ответе:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
Set-Cookie: session=abc123
Server: Apache

Распространённые заголовки:

Заголовок Использование
Host Указывает имя хоста
User-Agent Информация о браузере и ОС
Content-Type Тип данных в теле запроса/ответа
Authorization Токен авторизации
Location Используется в ответах 3xx для редиректа
Cache-Control Настройки кэширования
Set-Cookie / Cookie Управление сессией через cookies
Connection Управление сетевым соединением (keep-alive, close)

7. HTTP-сессии и куки

  • Cookies — фрагменты данных, которые сервер отправляет клиенту и которые тот сохраняет.
  • При последующих запросах браузер автоматически отправляет эти cookies обратно.
  • Используются для:
  • Аутентификации пользователей.
  • Хранения состояния сессии.
  • Персонализации.

🔐 Для безопасности используются флаги: HttpOnly, Secure, SameSite.


8. REST API и HTTP

REST (Representational State Transfer) — архитектурный стиль, основанный на использовании HTTP-методов и URI для взаимодействия между клиентом и сервером.

Пример REST-запроса:

GET /api/users/123 HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer <token>

Пример ответа:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "name": "John Doe"
}

9. Полезные инструменты для работы с HTTP(S)

Инструмент Описание
Postman Графический клиент для тестирования API.
curl Командная строка для отправки HTTP-запросов.
HTTPie Современная альтернатива curl с удобным интерфейсом.
Wireshark Анализ сетевого трафика (включая HTTP/HTTPS).
Chrome DevTools / F12 Инструменты разработчика в браузере.
Burp Suite Инструмент для тестирования безопасности веб-приложений.

10. Примеры использования curl

# GET-запрос
curl https://example.com

# POST-запрос с данными
curl -X POST https://api.example.com/data -H "Content-Type: application/json" -d '{"name":"John"}'

# Получить только заголовки
curl -I https://example.com

# Отправить заголовок авторизации
curl -H "Authorization: Bearer <token>" https://api.example.com/user

11. FAQ

❓ Что делать, если сайт открывается по HTTP, но не по HTTPS?

  • Проверьте SSL-сертификат.
  • Убедитесь, что порт 443 открыт.
  • Проверьте настройки веб-сервера (например, Nginx, Apache).

❓ Как проверить, какой протокол используется?

  • В адресной строке браузера должен быть замочек ✅.
  • Используйте DevTools → Network → выберите запрос → Headers.

❓ Можно ли использовать HTTP в продакшене?

  • Не рекомендуется. Все современные сайты должны использовать HTTPS для безопасности.

12. Полезные ссылки