Кратко

  • Expect: 100-continue сообщает, что клиент удерживает тело, чтобы метод, цель и заголовки могли сначала вызвать окончательный отказ.
  • 100 лишь предлагает продолжить передачу. Источник всё равно обязан выдать конечный статус, а посредник иногда создаёт временное разрешение сам.
  • Клиент может перестать ждать и отправить тело; старый узел, потерявший 1xx, не должен превращать оптимизацию во взаимную блокировку.

Решаемая часть пришла раньше дорогой

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

Немедленная отправка тратит канал перед 401 или 405. Пауза без общего сигнала создаёт тупик: клиент ждёт разрешения, сервер — тела. RFC 2068 в 1997 году определил информационный статус 100 и сложную совместимость с HTTP/1.0, где посредник мог его не передать.

Expect сделал ожидание явным

RFC 2616 добавил Expect: 100-continue. Сервер получил возможность отличить удерживаемое тело от уже идущего.

Ожидающий клиент обязан объявить намерение; без тела ожидание недопустимо. Если байты уже пришли, сервер может не посылать бесполезный 100. Получив полные заголовки HTTP/1.1, признак тела и Expect, источник немедленно выдаёт определимый по заголовкам финал или 100, не ожидая тела.

Продолжение не означало успеха

1xx не завершает запрос. После 100 сервер принимает и обрабатывает тело, затем посылает конечный статус, если соединение не оборвалось.

Смысл узок: пока нет причины остановить передачу. Не подтверждены личность, правильность, сохранение, выполнение или успех. Это не подготовка транзакции и не двухфазная фиксация; управляются байты, а не итог метода.

Прокси мог разрешить путь, но не принять операцию

Прокси выдаёт известный ему финал либо передаёт заголовки. Зная о старом следующем узле, он иногда генерирует 100. Это доказывает готовность участка нести данные, а не то, что источник их увидел или принял.

417 говорит, что цепочка не поддержала ожидание. Повтор без него убирает оптимизацию, но не делает повторение метода с эффектами безопасным. Нужно знать, что достигло источника.

Молчание не получило бесконечного права остановки

RFC 7231 и RFC 9110 не задают обязательного срока. Клиент может отправить тело без 100 и не должен ждать бесконечно.

Старый посредник способен потерять 1xx. Локальный тайм-аут меняет возможный расход байтов на гарантированное продвижение и не превращает молчание во власть. Универсального порога размера и задержки нет; для малого тела дополнительный обмен может быть дороже.

После раннего финала остаются границы сообщения

Конечный ответ может прийти во время отправки. Сервер закрывает соединение либо читает и отбрасывает остаток, сохраняя границу следующего сообщения. Вердикт приложения и судьба соединения независимы; остаточные байты не должны стать ложным новым запросом.

Источники и пределы

Закрытый набор — RFC 2068, RFC 2616, RFC 7231 и RFC 9110. Он устанавливает историю и смысл, но не нынешнее внедрение, тайм-ауты, экономию или поведение посредников.