다음을 통해 공유


HttpSendResponseEntityBody 함수(http.h)

HttpSendResponseEntityBody 함수는 HTTP 응답과 연결된 엔터티 본문 데이터를 보냅니다.

구문

HTTPAPI_LINKAGE ULONG HttpSendResponseEntityBody(
  [in]           HANDLE           RequestQueueHandle,
  [in]           HTTP_REQUEST_ID  RequestId,
  [in]           ULONG            Flags,
  [in]           USHORT           EntityChunkCount,
  [in]           PHTTP_DATA_CHUNK EntityChunks,
  [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 버전과 연결된 영구 연결 기능을 재정의하여 네트워크 연결의 연결을 끊어야 합니다. 애플리케이션은 콘텐츠 길이나 청크 인코딩이 사용되지 않는 경우 엔터티의 끝을 나타내기 위해 이 플래그를 사용해야 합니다.
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
이 응답에 대한 추가 엔터티 본문 데이터는 HttpSendResponseEntityBody에 대한 하나 이상의 후속 호출을 통해 애플리케이션에서 전송됩니다. 그런 다음 마지막 호출은 이 플래그를 0으로 설정합니다.
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
이 플래그를 사용하면 응답별로 커널의 데이터를 버퍼링할 수 있습니다.

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

한 번에 둘 이상의 송신이 있을 수 있는 비동기 I/O를 사용하는 애플리케이션은 이 플래그를 사용하지 않아야 합니다.

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

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

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

Windows Vista 이상: 이 플래그는 지원되지 않습니다.

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인 경우에만 허용됩니다. 이 플래그를 사용하는 경우 HttpSendResponseEntityBody는 다른 모든 HTTP 응답 형식에 대한 ERROR_INVALID_PARAMETER 반환합니다.

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

 
주의HttpSendHttpResponse 함수에 대한 단일 호출에서 두 플래그를 결합하면 정의되지 않은 결과가 생성됩니다.
 

[in] EntityChunkCount

pEntityChunks가 가리키는 배열의 여러 구조체입니다. 이 개수는 9999를 초과할 수 없습니다.

[in] EntityChunks

엔터티 본문 데이터로 보낼 HTTP_DATA_CHUNK 구조체 배열에 대한 포인터입니다.

[out] BytesSent

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

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

[in] Reserved1

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

[in] Reserved2

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

[in] Overlapped

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

동기 호출은 pEntityChunks 매개 변수에 지정된 모든 응답 데이터가 전송될 때까지 차단되는 반면, 비동기 호출은 즉시 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
제공된 매개 변수 중 하나 이상이 사용할 수 없는 형식입니다.
ERROR_BAD_COMMAND
동일한 RequestId를 가진 HttpSendHttpResponse 또는 HttpSendResponseEntityBody에 보류 중인 호출이 있습니다.
기타
WinError.h에 정의된 시스템 오류 코드 입니다.

설명

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

참고HttpSendResponseEntityBody (또는 HttpSendHttpResponse) 및 HttpSendResponseEntityBody 는 동일한 RequestId의 다른 스레드에서 동시에 호출되어서는 안 됩니다.
 

요구 사항

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

추가 정보

HTTP Server API 버전 1.0 함수

HTTP_DATA_CHUNK

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendHttpResponse