HTTPQUERY
한국어

100 Continue

사용법

Expect 헤더를 포함하는 클라이언트는 메시지 본문을 전송하기 전에 서버가 이를 받을 준비가 되어 있는지 확인하려 합니다. 메시지 본문이 크거나, 서버가 받아들이지 않는 콘텐츠 타입을 사용하거나, 사용자에게 파일을 보낼 권한이 없는 경우, 이 과정은 본문을 보내기 전에 그러한 조건을 검증합니다.

100 Continue 상태 코드가 도착하면 메시지 본문이 전송됩니다. 서버가 대신 417을 반환하면 클라이언트는 계속 진행하지 않습니다.

Expect 헤더를 100-continue와 함께 사용하는 장점은 서버가 수신하고 처리하는 콘텐츠를 까다롭게 선별할 때 대역폭을 절약할 수 있다는 점입니다.

단점은 HTTP 요청 헤더와 본문이 각각 따로 전송된다는 점입니다. 일부 환경에서는 둘이 분리되기 쉬워, HTTP 요청을 처리하는 대신 오류를 반환하기도 합니다.

예시

요청

PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 99000
Expect: 100-continue

응답

HTTP/1.1 100 Continue

요청에 대한 후속 동작

<PDF file contents are sent as message body>

최종 응답

HTTP/1.1 200 OK

클라이언트는 99 KB짜리 PDF 파일을 처리용으로 서버에 보내려 하며, 이를 HTTP 요청에 표시해 미리 검증을 요청합니다. 서버가 긍정적으로 응답하면 클라이언트는 메시지 본문을 전송합니다. 최종 응답으로 서버는 성공 표시와 함께 이 HTTP 세션을 마무리합니다.

또는 서버가 오류로 응답하기도 합니다.

HTTP/1.1 417 Expectation Failed

이 경우 클라이언트는 PDF를 보내지 않으며, 이후 통신은 새로운 HTTP 요청으로 시작됩니다.

클라이언트 라이브러리의 Expect100Continue

많은 HTTP 클라이언트 라이브러리가 Expect100Continue를 설정 가능한 속성으로 노출합니다. .NET에서는 ServicePointManager.Expect100Continue가 POST 및 PUT 요청에 Expect: 100-continue 헤더를 자동으로 포함할지 여부를 제어합니다. 이 속성을 비활성화하면 사전 확인 단계를 건너뛰고 본문을 즉시 전송합니다.

코드 참고

.NET

HttpStatusCode.Continue

Rust

http::StatusCode::CONTINUE

Rails

:continue

Go

http.StatusContinue

Symfony

Response::HTTP_CONTINUE

Python3.5+

http.HTTPStatus.CONTINUE

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_CONTINUE

Angular

@angular/common/http/HttpStatusCode.Continue