WinHTTP 5.1의 새로운 기능

이 항목에서는 WinHTTP 버전 5.1과 버전 5.0 간의 가장 중요한 차이점에 대해 설명합니다. 이러한 차이의 대부분은 버전 5.0에서 버전 5.1로 마이그레이션하는 애플리케이션의 코드 변경이 필요합니다. 버전 5.1의 일부 기능은 Windows Server 2003 및 Windows XP SP2(서비스 팩 2)부터만 사용할 수 있으며, 특히 악성 웹 서버에 대한 클라이언트 보안 개선과 관련된 기능입니다.

중요

WinHTTP 버전 5.1 릴리스에서는 WinHTTP 5.0 다운로드를 더 이상 사용할 수 없습니다. 2004년 10월 1일부터 Microsoft는 MSDN에서 WinHTTP 5.0 SDK 다운로드를 제거하고 버전 5.0에 대한 제품 지원을 종료했습니다.

 

DLL 이름 변경

새 WinHTTP 5.1 DLL의 이름은 Winhttp.dll WinHTTP 5.0 DLL의 이름은 Winhttp5.dll.

WinHTTP 5.0 및 5.1은 동일한 시스템에서 공존할 수 있습니다. WinHTTP 5.1은 WinHTTP 5.0을 대체하거나 설치하지 않습니다.

재배포

WinHTTP 5.1은 Windows Server 2003, Windows 2000 Professional sp3(서비스 팩 3), Windows XP sp1(서비스 팩 1) 이상 운영 체제에서만 사용할 수 있습니다. WinHTTP 5.1에는 재배포 가능한 병합 모듈(.msm) 파일을 사용할 수 없습니다.

WinHttpRequest ProgID

WinHttpRequest 구성 요소의 ProgID가 "WinHttp.WinHttpRequest.5"에서 "WinHttp.WinHttpRequest.5.1"로 변경되었습니다. WinHttpRequest 클래스의 CLSID도 변경되었습니다.

비동기 콜백 동작 변경

비동기 모드에서 WinHttpWriteData, WinHttpQueryDataAvailableWinHttpReadData 함수를 호출하는 경우 설정할 각 lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailablelpdwNumberOfBytesRead OUT 매개 변수를 사용하지 마세요. 함수 호출이 비동기적으로 완료되면 WinHTTP는 애플리케이션 코드에서 제공하는 이러한 포인터에 쓰지 않습니다. 대신, 애플리케이션은 콜백 함수에 대한 lpvStatusInformationdwStatusInformationLength 매개 변수를 사용하여 이러한 값을 검색해야 합니다.

기본 설정에 대한 변경 내용

기본 설정의 변경 내용은 다음과 같습니다.

  • SSL 서버 인증서 확인은 WinHTTP 5.1에서 기본적으로 사용하도록 설정됩니다. WinHTTP 5.0은 서버 인증서의 유효성을 치명적 오류로 확인할 때 발생하는 오류를 처리하지 않습니다. SECURE_FAILURE 콜백 알림을 사용하여 애플리케이션에 보고되지만 요청이 중단되지는 않습니다. 또는 WinHTTP 5.1은 요청을 중단하는 심각한 오류로 서버 인증서 유효성 검사 오류를 처리합니다. 애플리케이션은 WINHTTP_OPTION_SECURITY_FLAGS 옵션을 사용하여 알 수 없는 CA, 유효하지 않은/만료된 인증서 날짜 또는 잘못된 인증서 주체 이름과 같은 인증서 오류의 작은 하위 집합을 무시하도록 WinHTTP에 지시할 수 있습니다.
  • Passport 인증 지원은 WinHTTP 5.1에서 기본적으로 사용하지 않도록 설정됩니다. passport 지원은 WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH 옵션을 사용하여 사용하도록 설정할 수 있습니다. Keyring의 자동 Passport 자격 증명 조회도 기본적으로 사용하지 않도록 설정됩니다.
  • 리디렉션 동작 변경: 보안 https 에서 HTTP 리디렉션: URL에서 일반 http로: URL은 보안상의 이유로 기본적으로 더 이상 자동으로 팔로우되지 않습니다. WinHTTP 5.1에서 기본 리디렉션 동작을 재정의하는 새로운 옵션인 WINHTTP_OPTION_REDIRECT_POLICY 있습니다. WinHttpRequest COM 구성 요소를 사용하면 새 WinHttpRequestOption_EnableHttpsToHttpRedirects 옵션을 사용하여 https: URL로의 리디렉션을 사용하도록 설정합니다.
  • WinHTTP 추적 파일을 만들면 관리자만 파일을 읽거나 쓸 수 있도록 ACL로 액세스가 제한됩니다. 추적 파일을 만든 사용자 계정은 다른 사용자에게 액세스 권한을 부여하도록 ACL을 수정할 수도 있습니다. 이 보호는 보안을 지원하는 파일 시스템에서만 사용할 수 있습니다. 즉, FAT32가 아닌 NTFS)입니다.
  • Windows Server 2003 및 WINDOWS XP SP2부터는 21(FTP), 25(SMTP), 70(GOPHER), 110(POP3), 119(NNTP), 143(IMAP)과 같은 잘 알려진 비 HTTP로 요청을 보내는 포트가 보안상의 이유로 제한됩니다.
  • Windows Server 2003 및 WINDOWS XP SP2부터 WinHTTP가 HTTP 응답에서 허용하는 헤더 데이터의 최대 크기는 기본적으로 64K입니다. 서버 HTTP 응답에 총 헤더 데이터의 64K가 더 포함된 경우 WinHTTP는 ERROR_WINHTTP_INVALID_SERVER_RESPONSE 오류와 함께 요청에 실패합니다. 이 64K 제한은 새 WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE 옵션을 사용하여 재정의할 수 있습니다.

IPv6 지원

WinHTTP 5.1은 IPv6(인터넷 프로토콜 버전 6)에 대한 지원을 추가합니다. WinHTTP는 DNS 이름이 IPv6 주소로 확인되는 서버에 HTTP 요청을 보낼 수 있으며 Windows Server 2003 및 WINDOWS XP SP2부터 WinHTTP는 IPv6 리터럴 주소도 지원합니다.

WinHTTP용 C/C++ API의 새 옵션

WinHTTP 5.1은 다음과 같은 새로운 옵션을 구현합니다.

"\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86" "\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87" "\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88"

Windows Server 2003 및 Windows XP SP2부터 WinHTTP 5.1은 다음과 같은 새로운 옵션을 구현합니다. 그러나 SP3가 있는 Windows 2000 Professional 또는 WINDOWS XP SP1에서는 이러한 옵션 ID를 사용하여 WinHttpSetOption 또는 WinHttpQueryOption에 대한 호출이 실패합니다.

"\#define WINHTTP\_OPTION\_RECEIVE\_RESPONSE\_TIMEOUT 7" "\#define WINHTTP\_OPTION\_MAX\_HTTP\_AUTOMATIC\_REDIRECTS 89" "\#define WINHTTP\_OPTION\_MAX\_HTTP \_STATUS\_CONTINUE 90" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_HEADER\_SIZE 91" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_DRAIN\_SIZE 92"

WinHttpRequest 5.1 구성 요소의 새 옵션

WinHttpRequest 5.1 구성 요소는 다음과 같은 새로운 옵션을 구현합니다.

"WinHttpRequestOption\_RevertImpersonationOverSsl" "WinHttpRequestOption\_EnableHttpsToHttpRedirects" "WinHttpRequestOption\_EnablePassportAuthentication"

Windows Server 2003 및 Windows XP SP2부터 다음과 같은 새로운 WinHttpRequest 5.1 옵션을 사용할 수 있습니다.

"WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"

자동 로그온 보안이 높음으로 설정된 경우 프록시를 신뢰할 수 없음

WinHTTP 5.0에서 프록시 서버는 항상 자동 로그온에 대해 신뢰할 수 있습니다. WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH 정책 옵션이 설정된 경우 Windows Server 2003 및 Windows XP SP2에서 실행되는 WinHTTP 5.1에는 더 이상 유효하지 않습니다.

웹 프록시 자동 검색(AutoProxy) API

WinHTTP 기반 애플리케이션에 대한 프록시 설정의 구성을 용이하게 하기 위해 WinHTTP는 이제 자동 프록시라고도 하는 WPAD(웹 프록시 자동 검색) 프로토콜을 구현합니다. 이는 인터넷 Explorer 같은 웹 브라우저가 프록시 서버를 수동으로 지정할 필요 없이 프록시 구성을 자동으로 검색하기 위해 구현하는 것과 동일한 프로토콜입니다. 자동 프록시를 지원하기 위해 WinHTTP 5.1은 새 C/C++ 함수 인 WinHttpGetProxyForUrl과 두 개의 지원 함수 인 WinHttpDetectAutoProxyConfigUrlWinHttpGetIEProxyConfigForCurrentUser를 구현합니다.

알려진 문제

다음 문제는 Windows 2000 Professional SP3의 WinHTTP 5.1 및 SP1이 있는 Windows XP에 있는 것으로 알려져 있습니다. 이러한 문제는 Windows Server 2003 및 Windows XP SP2부터 WinHTTP에 대해 해결됩니다.

  • 애플리케이션이 WinHttpRequest 구성 요소의 WinHttpSetTimeouts 함수 또는 SetTimeouts 메서드를 사용하여 dwResolveTimeout 매개 변수와 같은 무한 DNS resolve 시간 제한을 설정하는 경우 WinHTTP가 DNS 이름을 확인할 때마다 스레드 핸들 누수가 발생합니다. 많은 수의 HTTP 요청에서 이로 인해 상당한 메모리 누수가 발생합니다. 해결 방법은 기본 무한 resolve 시간 제한 설정을 변경하지 않은 상태로 두는 것입니다(값 0은 무한 시간 제한을 지정함). WinHTTP에서 DNS 이름 확인에 대한 시간 제한을 지원하는 것은 성능 측면에서 비용이 많이 들기 때문에 어떤 경우에도 이 작업을 수행하는 것이 좋습니다. Windows 2000 이상의 경우 기본 DNS 클라이언트 서비스가 자체 resolve 시간 제한을 구현하므로 WinHTTP에서 DNS resolve 시간 제한을 설정할 필요가 없습니다.
  • 비동기 요청을 처리할 때 WinHTTP는 스레드 가장을 제대로 처리하지 않습니다. 이렇게 하면 WinHttpSetCredentials 또는 WinHttpSetOption 함수를 사용하여 자격 증명을 명시적으로 지정하지 않는 한 NTLM/Negotiate 인증이 필요한 요청이 실패합니다.