🌐 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-запроса:
- Клиент (браузер) отправляет HTTP-запрос на сервер.
- Сервер получает запрос, обрабатывает его и отправляет HTTP-ответ.
- Браузер получает ответ (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-запроса:
- Устанавливается TLS-соединение (шифрованный канал).
- Сервер представляет свой SSL-сертификат.
- После проверки сертификата, устанавливается защищённое соединение.
- Далее происходит обычный 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. Полезные ссылки
- RFC 7230 — HTTP/1.1 Specification
- MDN Web Docs: HTTP
- HTTP Status Codes
- HTTP Cats — картинки для статус-кодов