WinHTTP가 407과 401을 번갈아 반환할 때
선택한 프록시 인증 상태를 유지하고 다시 시도하기 전에 재적용하면서, 대상의 별도 인증 요구는 따로 처리합니다.
WinHTTP 요청은 프록시에 인증하고, 웹 사이트의 401을 받은 뒤 다음 전송에서 다시 407을 받습니다. 프록시와 웹 사이트는 각각 별도의 인증 상태를 가지며, 재전송 경로는 두 상태를 모두 유지해야 합니다.
Microsoft의 기본 WinHTTP 인증 예제는 선택한 프록시 체계를 변수에 보관하고, 해당 체계를 선택한 뒤에는 각 WinHttpSendRequest 전에 프록시 계정을 다시 적용합니다.
- 요청을 보내고 응답을 확인합니다.
- 407이면 제공된 체계를 조회하고 선택한 프록시 체계를 기억합니다.
- 재전송 전에 그 체계와 계정으로 WINHTTP_AUTH_TARGET_PROXY에 대해 WinHttpSetCredentials를 호출합니다.
- 대상의 401이면 그 체계를 얻어 서버 자격 증명을 설정하고, 다음 전송을 위해 기억한 프록시 상태는 유지합니다.
이 예제는 서버 인증 요구나 리디렉션 후의 재인증을 프록시 자격 증명을 다시 적용하는 이유로 명시합니다. 호출을 첫 번째 407 분기에만 두면 다른 재시도 경로가 기대한 설정 없이 남을 수 있습니다.
모든 API 결과를 확인하고 반복되는 실패에는 상한을 두십시오. Microsoft의 간결한 예제는 이전 상태를 추적하지만, 운영 환경의 재시도 정책은 반복되는 교대 순서도 인식해야 합니다.
실패 후 사용자가 대체 계정을 제공하면 해당 재전송 경로가 사용하는 값을 갱신하십시오. WinHttpSetCredentials는 요청 범위이며, 모든 향후 요청에 대해 내용이 교체되는 프로세스 전역 암호 저장소가 아닙니다.