Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое код состояния HTTP 100 (Continue)?
Код состояния 100 Continue — это промежуточный (информационный) статус в протоколе HTTP, который указывает клиенту на то, что сервер готов принять тело запроса после получения заголовков. Это часть механизма условной отправки данных (expect-continue), который позволяет клиенту сначала отправить только заголовки запроса, убедиться, что сервер готов его обработать, и только затем отправить основное тело (например, большое количество данных).
Как работает процесс с кодом 100?
Процесс происходит в два этапа:
-
Клиент отправляет предварительный запрос:
- Включает заголовок
Expect: 100-continue. - Отправляет только заголовки запроса (без тела).
- Пример запроса (например, для загрузки файла):
POST /upload HTTP/1.1 Host: example.com Content-Type: application/json Content-Length: 1024 Expect: 100-continue [тело запроса пока НЕ отправляется] - Включает заголовок
-
Сервер анализирует заголовки и отправляет ответ:
- Если сервер готов принять тело запроса (например, у него есть ресурсы, URL корректен), он отправляет промежуточный ответ
100 Continue. - Если сервер не готов (например, ошибка аутентификации или недопустимый запрос), он отправляет финальный код ошибки (например,
401 Unauthorizedили413 Payload Too Large), и клиент не отправляет тело запроса.
- Если сервер готов принять тело запроса (например, у него есть ресурсы, URL корректен), он отправляет промежуточный ответ
-
Клиент действует на основе ответа сервера:
- При получении
100 Continueклиент отправляет тело запроса. - При получении кода ошибки (например,
413) клиент прерывает отправку, экономя трафик и время.
- При получении
Практический пример кода
Вот пример на Node.js, показывающий, как сервер может обрабатывать запрос с Expect: 100-continue:
const http = require('http');
const server = http.createServer((req, res) => {
// Проверяем заголовок Expect
if (req.headers.expect === '100-continue') {
// Симулируем проверку: например, проверяем размер контента
const contentLength = parseInt(req.headers['content-length'],奥 10);
if (contentLength > 5000) {
// Если тело слишком большое, сразу отказываем
res.writeHead(413, { 'Content-Type': 'text/plain' });
res.end('Payload Too Large');
return;
}
// Если все хорошо, отправляем 100 Continue
res.writeContinue();
}
// Обрабатываем оставшуюся часть запроса
let body = '';
req.on('data', chunk => body += chunk);
req.on('end', () => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(`Received data: ${body}`);
});
});
server.listen(3000, () => console.log('Server running on port 3000'));
Зачем нужен код 100 Continue?
Основные причины использования:
- Оптимизация передачи больших данных: Клиент избегает отправки объемного тела (например, файла размером 1 ГБ), если сервер отклонит запрос из-за ошибки в заголовках (например,
401 Unauthorized). Это экономит сетевой трафик и снижает нагрузку. - Согласование условий: Позволяет серверу заранее проверить условия, такие как:
- Достаточно ли места на диске?
- Корректен ли тип контента?
- Прошла ли аутентификация?
- Улучшение производительности: В медленных сетях или при высокой задержке (latency) это предотвращает ненужную передачу данных.
Особенности и нюансы
- HTTP/1.1 спецификация: Код 100 определен в RFC 7231 (раздел 6.2.1). В HTTP/2 механизм работает аналогично, но с использованием фреймов.
- Автоматическая обработка в библиотеках: Многие клиентские библиотеки (например,
fetchв браузерах,axiosилиrequestsв Python) автоматически поддерживаютExpect: 100-continueдля больших запросов, но разработчик может этого не заметить. - Необязательное использование: Серверы могут игнорировать
Expect: 100-continueи сразу обрабатывать запрос, если это допустимо. Клиенты обычно ждут ответа 100 недолго (таймаут 1-2 секунды), затем отправляют тело. - Редкость в повседневной разработке: В веб-приложениях код 100 редко встречается явно, так как большинство запросов (GET, мелкие POST) не требуют этой оптимизации. Он чаще используется в API для загрузки файлов или стриминга данных.
Заключение
100 Continue — это важный, хотя и часто "невидимый", механизм оптимизации в HTTP, который помогает избежать бесполезной передачи данных при ошибочных запросах. Как frontend-разработчик, вы можете столкнуться с ним при работе с большими файлами через fetch или XMLHttpRequest, но обычно библиотеки и браузеры управляют этим процессом автоматически. Понимание этого кода полезно для отладки сетевых запросов и проектирования эффективных API.