HttpSendHttpResponse 함수(http.h)

HttpSendHttpResponse 함수는 지정된 HTTP 요청에 HTTP 응답을 보냅니다.

구문

HTTPAPI_LINKAGE ULONG HttpSendHttpResponse(
  [in]           HANDLE             RequestQueueHandle,
  [in]           HTTP_REQUEST_ID    RequestId,
  [in]           ULONG              Flags,
  [in]           PHTTP_RESPONSE     HttpResponse,
  [in, optional] PHTTP_CACHE_POLICY CachePolicy,
  [out]          PULONG             BytesSent,
  [in]           PVOID              Reserved1,
  [in]           ULONG              Reserved2,
  [in]           LPOVERLAPPED       Overlapped,
  [in, optional] PHTTP_LOG_DATA     LogData
);

매개 변수

[in] RequestQueueHandle

지정된 요청이 검색된 요청 큐에 대한 핸들입니다. 요청 큐가 생성되고 HttpCreateRequestQueue 함수에 대한 호출에서 해당 핸들이 반환됩니다.

WINDOWS Server 2003 SP1 및 Windows XP SP2: 요청 큐에 대한 핸들은 HttpCreateHttpHandle 함수에 의해 만들어집니다.

[in] RequestId

이 응답이 해당하는 HTTP 요청의 식별자입니다. 이 값은 httpReceiveHttpRequest 함수를 호출하여 HTTP_REQUEST 구조체의 RequestId 멤버에 반환됩니다. 이 값은 HTTP_NULL_ID 수 없습니다.

[in] Flags

이 매개 변수는 다음 플래그 값 중 일부의 조합일 수 있습니다. 상호 배타적인 항목은 그에 따라 표시됩니다.

플래그 의미
HTTP_SEND_RESPONSE_FLAG_DISCONNECT
이 응답을 보낸 후 사용 중인 HTTP 버전과 연결된 영구 연결 기능을 재정의하여 네트워크 연결의 연결을 끊어야 합니다.
주의HttpSendHttpResponse 함수에 대한 단일 호출에서 HTTP_SEND_RESPONSE_FLAG_DISCONNECT HTTP_SEND_RESPONSE_FLAG_MORE_DATA 결합하면 정의되지 않은 결과가 생성됩니다.
 
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
이 응답에 대한 추가 엔터티 본문 데이터는 HttpSendResponseEntityBody에 대한 하나 이상의 후속 호출을 통해 애플리케이션에서 전송됩니다. 엔터티 본문 데이터를 보내는 마지막 호출은 이 플래그를 0으로 설정합니다.
주의HttpSendHttpResponse 함수에 대한 단일 호출에서 HTTP_SEND_RESPONSE_FLAG_DISCONNECT HTTP_SEND_RESPONSE_FLAG_MORE_DATA 결합하면 정의되지 않은 결과가 생성됩니다.
 
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
이 플래그를 사용하면 응답별로 커널의 데이터를 버퍼링할 수 있습니다.

동기 I/O를 수행하는 애플리케이션 또는 비동기 I/O를 수행하는 애플리케이션에서 한 번에 둘 이상의 미해결 송신 없이 사용해야 합니다.

비동기 I/O를 사용하고 한 번에 둘 이상의 송신이 미해결된 애플리케이션은 이 플래그를 사용하지 않아야 합니다.

이 플래그가 설정되면 HttpSendResponseEntityBody 함수 호출에서도 일관되게 사용해야 합니다.

Windows Server 2003: 이 플래그는 지원되지 않습니다. 이 플래그는 WINDOWS Server 2003 SP1의 새로운 기능입니다.

HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING
이 송신에 대해서만 TCP 잔소리 알고리즘을 사용하도록 설정합니다.

WINDOWS Server 2003 SP1 및 Windows XP SP2: 이 플래그는 지원되지 않습니다.

HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES
범위 요청의 경우 전체 응답 콘텐츠가 전달되고 호출자가 HTTP API가 범위를 적절하게 처리하도록 지정합니다.
참고 이 플래그는 HTTP GET 요청에 대한 응답에 대해서만 지원되며 제한된 기능 하위 집합을 제공합니다. 전체 범위 처리가 필요한 애플리케이션은 사용자 모드에서 수행해야 하며 HTTP.sys 의존하지 않아야 합니다. 사용은 권장되지 않습니다.
 
Windows Server 2008 R2 및 Windows 7 이상.

참고 이 플래그는 지원됩니다.

HTTP_SEND_RESPONSE_FLAG_OPAQUE
요청/응답이 HTTP 규격이 아니고 모든 후속 바이트가 엔터티 본문으로 처리되도록 지정합니다. 애플리케이션은 웹 소켓 업그레이드 요청을 수락하고 연결 데이터를 불투명 데이터로 처리하도록 HTTP.sys 알리는 경우 이 플래그를 지정합니다.

이 플래그는 pHttpResponseStatusCode 멤버가 프로토콜을 전환하는 101인 경우에만 허용됩니다. 이 플래그를 사용하는 경우 HttpSendHttpResponse는 다른 모든 HTTP 응답 형식에 대한 ERROR_INVALID_PARAMETER 반환합니다.

Windows 8 이상: 이 플래그는 지원됩니다.

[in] HttpResponse

HTTP 응답을 정의하는 HTTP_RESPONSE 구조체에 대한 포인터입니다.

[in, optional] CachePolicy

응답을 캐시하는 데 사용되는 HTTP_CACHE_POLICY 구조체에 대한 포인터입니다.

WINDOWS Server 2003 SP1 및 Windows XP SP2: 이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

[out] BytesSent

(선택 사항) 함수가 동기적으로 작동하는 경우 전송되는 숫자(바이트)를 수신하는 변수에 대한 포인터입니다.

pOverlapped를 사용하여 비동기 호출을 할 때 pBytesSentNULL로 설정합니다. 그렇지 않으면 pOverlappedNULL로 설정된 경우 pBytesSent 는 유효한 메모리 주소를 포함해야 하며 NULL로 설정되지 않아야 합니다.

[in] Reserved1

이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

[in] Reserved2

이 매개 변수는 예약되어 있으며 0이어야 합니다.

[in] Overlapped

비동기 호출의 경우 pOverlappedOVERLAPPED 구조를 가리키도록 설정합니다. 동기 호출의 경우 을 NULL로 설정합니다.

동기 호출은 pHttpResponse 매개 변수에 지정된 모든 응답 데이터가 전송될 때까지 차단되는 반면, 비동기 호출은 즉시 ERROR_IO_PENDING 반환하고 호출 애플리케이션은 GetOverlappedResult 또는 I/O 완료 포트를 사용하여 작업이 완료되는 시기를 결정합니다. 동기화에 OVERLAPPED 구조를 사용하는 방법에 대한 자세한 내용은 동기화 및 겹치는 입력 및 출력을 참조하세요.

[in, optional] LogData

응답을 기록하는 데 사용되는 HTTP_LOG_DATA 구조체에 대한 포인터입니다. HTTP_LOG_FIELDS_DATA 구조체에 포인터를 전달하고 PHTTP_LOG_DATA 캐스팅합니다.

URL 그룹 또는 서버 세션에서 로깅을 사용하도록 설정한 경우에도 애플리케이션이 로그 필드 데이터 구조를 제공하지 않는 한 응답이 기록되지 않습니다.

Windows Server 2003 및 Windows XP SP2: 이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

Windows Vista 및 Windows Server 2008: 이 매개 변수는 Windows Vista 및 Windows Server 2008의 새로운 기능입니다.

반환 값

함수가 성공하면 함수는 NO_ERROR 반환합니다.

함수를 비동기적으로 사용하는 경우 ERROR_IO_PENDING 반환 값은 다음 요청이 아직 준비되지 않았으며 나중에 일반적인 겹치는 I/O 완료 메커니즘을 통해 검색됨을 나타냅니다.

함수가 실패하면 다음 오류 코드 중 하나를 반환합니다.

의미
ERROR_INVALID_PARAMETER
제공된 매개 변수 중 하나 이상이 사용할 수 없는 형식입니다.
기타
WinError.h에 정의된 시스템 오류 코드 입니다.

설명

HttpSendHttpResponse 함수는 응답 헤더를 만들고 보내는 데 사용되며, 필요에 따라 HttpSendResponseEntityBody 함수를 사용하여 엔터티 본문 데이터를 보낼 수 있습니다.

콘텐츠 길이 헤더나 전송 인코딩 헤더가 응답에 포함되지 않은 경우 애플리케이션은 HTTP_SEND_RESPONSE_DISCONNECT 플래그를 사용하여 연결을 명시적으로 닫아 응답의 끝을 나타내야 합니다.

애플리케이션이 응답에서 "Server:" 헤더를 지정하는 경우, HTTP_KNOWN_HEADER 구조의 HttpHeaderServer 식별자를 사용하여 지정된 값이 헤더의 첫 번째 부분으로 배치되고 그 뒤에 공백이 뒤에 "Microsoft-HTTPAPI/1.0"이 표시됩니다. 서버 헤더가 지정되지 않은 경우 HttpSendHttpResponse 는 "Microsoft-HTTPAPI/1.0"을 서버 헤더로 제공합니다.

참고HttpSendHttpResponseHttpSendResponseEntityBody 함수는 동일한 RequestId의 다른 스레드에서 동시에 호출되어서는 안 됩니다.
 

요구 사항

   
지원되는 최소 클라이언트 Windows Vista, WINDOWS XP SP2 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 http.h
라이브러리 Httpapi.lib
DLL Httpapi.dll

참고 항목

HTTP Server API 버전 1.0 함수

HTTP_RESPONSE

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendResponseEntityBody