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 버전과 연결된 영구 연결 기능을 재정의하여 네트워크 연결의 연결을 끊어야 합니다. 주의HttpSendHttpResponse 함수에 대한 단일 호출에서 HTTP_SEND_RESPONSE_FLAG_DISCONNECT 및HTTP_SEND_RESPONSE_FLAG_MORE_DATA 결합하면 정의되지 않은 결과가 생성됩니다.
|
|
이 응답에 대한 추가 엔터티 본문 데이터는 HttpSendResponseEntityBody에 대한 하나 이상의 후속 호출을 통해 애플리케이션에서 전송됩니다. 엔터티 본문 데이터를 보내는 마지막 호출은 이 플래그를 0으로 설정합니다.
주의HttpSendHttpResponse 함수에 대한 단일 호출에서 HTTP_SEND_RESPONSE_FLAG_DISCONNECT 및HTTP_SEND_RESPONSE_FLAG_MORE_DATA 결합하면 정의되지 않은 결과가 생성됩니다.
|
|
이 플래그를 사용하면 응답별로 커널의 데이터를 버퍼링할 수 있습니다.
동기 I/O를 수행하는 애플리케이션 또는 비동기 I/O를 수행하는 애플리케이션에서 한 번에 둘 이상의 미해결 송신 없이 사용해야 합니다. 비동기 I/O를 사용하고 한 번에 둘 이상의 송신이 미해결된 애플리케이션은 이 플래그를 사용하지 않아야 합니다. 이 플래그가 설정되면 HttpSendResponseEntityBody 함수 호출에서도 일관되게 사용해야 합니다. Windows Server 2003: 이 플래그는 지원되지 않습니다. 이 플래그는 WINDOWS Server 2003 SP1의 새로운 기능입니다. |
|
이 송신에 대해서만 TCP 잔소리 알고리즘을 사용하도록 설정합니다.
WINDOWS Server 2003 SP1 및 Windows XP SP2: 이 플래그는 지원되지 않습니다. |
|
범위 요청의 경우 전체 응답 콘텐츠가 전달되고 호출자가 HTTP API가 범위를 적절하게 처리하도록 지정합니다.
참고 이 플래그는 HTTP GET 요청에 대한 응답에 대해서만 지원되며 제한된 기능 하위 집합을 제공합니다. 전체 범위 처리가 필요한 애플리케이션은 사용자 모드에서 수행해야 하며 HTTP.sys 의존하지 않아야 합니다. 사용은 권장되지 않습니다.
참고 이 플래그는 지원됩니다. |
|
요청/응답이 HTTP 규격이 아니고 모든 후속 바이트가 엔터티 본문으로 처리되도록 지정합니다. 애플리케이션은 웹 소켓 업그레이드 요청을 수락하고 연결 데이터를 불투명 데이터로 처리하도록 HTTP.sys 알리는 경우 이 플래그를 지정합니다.
이 플래그는 pHttpResponse의 StatusCode 멤버가 프로토콜을 전환하는 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를 사용하여 비동기 호출을 할 때 pBytesSent를 NULL로 설정합니다. 그렇지 않으면 pOverlapped 가 NULL로 설정된 경우 pBytesSent 는 유효한 메모리 주소를 포함해야 하며 NULL로 설정되지 않아야 합니다.
[in] Reserved1
이 매개 변수는 예약되어 있으며 NULL이어야 합니다.
[in] Reserved2
이 매개 변수는 예약되어 있으며 0이어야 합니다.
[in] Overlapped
비동기 호출의 경우 pOverlapped 를 OVERLAPPED 구조를 가리키도록 설정합니다. 동기 호출의 경우 을 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 완료 메커니즘을 통해 검색됨을 나타냅니다.
함수가 실패하면 다음 오류 코드 중 하나를 반환합니다.
값 | 의미 |
---|---|
|
제공된 매개 변수 중 하나 이상이 사용할 수 없는 형식입니다. |
|
WinError.h에 정의된 시스템 오류 코드 입니다. |
설명
HttpSendHttpResponse 함수는 응답 헤더를 만들고 보내는 데 사용되며, 필요에 따라 HttpSendResponseEntityBody 함수를 사용하여 엔터티 본문 데이터를 보낼 수 있습니다.
콘텐츠 길이 헤더나 전송 인코딩 헤더가 응답에 포함되지 않은 경우 애플리케이션은 HTTP_SEND_RESPONSE_DISCONNECT 플래그를 사용하여 연결을 명시적으로 닫아 응답의 끝을 나타내야 합니다.
애플리케이션이 응답에서 "Server:" 헤더를 지정하는 경우, HTTP_KNOWN_HEADER 구조의 HttpHeaderServer 식별자를 사용하여 지정된 값이 헤더의 첫 번째 부분으로 배치되고 그 뒤에 공백이 뒤에 "Microsoft-HTTPAPI/1.0"이 표시됩니다. 서버 헤더가 지정되지 않은 경우 HttpSendHttpResponse 는 "Microsoft-HTTPAPI/1.0"을 서버 헤더로 제공합니다.
요구 사항
지원되는 최소 클라이언트 | Windows Vista, WINDOWS XP SP2 [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | http.h |
라이브러리 | Httpapi.lib |
DLL | Httpapi.dll |