다음 목록에서는 HTTP Server API를 사용하는 일반적인 작업 시퀀스를 식별합니다.
- HttpInitialize 함수를 사용하여 HTTP Server API를 초기화합니다.
- HttpCreateHttpHandle 함수를 사용하여 요청 큐를 만듭니다.
- HttpAddUrl 함수를 사용하여 하나 이상의 URL을 등록합니다.
- HttpReceiveHttpRequest 함수를 사용하여 등록된 URL로 전달되는 들어오는 요청을 수신하고, HttpSendHttpResponse 함수를 사용하여 이러한 요청에 대한 HTTP 응답을 보냅니다.
- (선택 사항) 응답을 보낼 때 HttpSendResponseEntityBody 함수를 사용하여 추가 엔터티 본문을 보냅니다.
- HttpRemoveUrl, CloseHandle 및 HttpTerminate 함수를 사용하여 정리 작업을 수행합니다.
URL을 사용하는 작업에서는 HTTP_REQUEST_V1 구조체의 CookedUrl 멤버에 포함된 처리된 URL을 사용해야 합니다. 추적 및 통계 목적으로만 pRawUrl 멤버에서 처리되지 않은 URL을 사용하지 마세요.
각 애플리케이션은 자체 요청 큐를 만듭니다. 애플리케이션은 요청 큐 핸들을 HttpCreateHttpHandle에서 가져옵니다. 이 핸들을 HttpAddUrl 함수에 전달하여 요청 큐에 URL을 추가합니다. 애플리케이션은 들어오는 요청에 대한 알림을 수신하고 요청 큐 핸들을 사용하여 HttpReceiveHttpRequest 함수를 호출하여 요청 큐에서 검색합니다. 이 함수를 사용하여 요청 헤더 또는 헤더와 엔터티 본문을 모두 받을 수 있습니다. HttpReceiveHttpRequest 요청 핸들에 고유한 수신된 요청에 대한 요청 식별자(RequestId)도 반환합니다.
메모
사용 중인 경우 콘텐츠 협상 헤더를 포함하여 모든 관련 요청 헤더를 검사하고 헤더 콘텐츠에 따라 요청을 적절하게 실패하는 것은 애플리케이션의 책임입니다. HTTP Server API는 각 헤더 줄이 제대로 종료되고 잘못된 문자가 포함되지 않도록 합니다.
요청 큐 핸들과 함께 HttpReceiveRequestEntityBody 함수를 사용하여 요청 엔터티 본문의 후속 부분을 검색합니다(있는 경우).
메모
HTTP Server API는 수신 쪽에서 청크 분할 메시지를 디코딩하지만 송신 쪽에서는 청크 인코딩을 수행하지 않습니다. 송신 쪽에서 청크가 필요한 경우 애플리케이션에서 이를 구현해야 합니다. 청크 인코딩에 대한 자세한 내용은 rfC 2616 참조하세요.
HttpReceiveClientCertificate 함수를 보안 체계("https")를 사용하여 URL을 제공하는 애플리케이션에서 클라이언트의 인증서 정보를 선택적으로 검색합니다.
응답은 HttpSendHttpResponse 함수와 함께 전송됩니다. 이 함수는 해당 요청의 RequestId를 사용하여 응답을 보냅니다. 원래 수신된 요청의 RequestId를 사용하여 HttpSendResponseEntityBody 함수를 호출하여 시간이 지남에 따라 여러 API 호출에서 응답을 보낼 수 있습니다.
메모
기본적으로 HttpSendHttpResponse "Microsoft-HTTPAPI/1.0"을 "Server:" 헤더로 사용합니다. 애플리케이션이 응답에서 서버 헤더를 지정하는 경우 해당 값은 서버 헤더의 첫 번째 부분으로 배치된 다음 공백과 "Microsoft-HTTPAPI/1.0"으로 배치됩니다.
일반적으로 HTTP Server API는 연결 관리의 세부 정보와 해당 설정 및 애플리케이션의 해체를 숨깁니다. 그러나 애플리케이션은 필요에 따라 HttpWaitForDisconnect호출하여 연결 종료를 검색할 수 있습니다.
애플리케이션은 다음 단계를 사용하여 정리해야 합니다.
- 애플리케이션이 URL을 수신하거나 응답하지 않으면 HttpRemoveURL 함수를 사용하여 URL이 제거됩니다.
- 애플리케이션이 요청 큐 사용을 마치면 CloseHandle 함수를 사용하여 요청 큐 핸들을 닫습니다.
- 애플리케이션이 HTTP Server API 사용을 마치면 HttpTerminate 함수를 호출합니다.