Python이 CONNECT에 항상 HTTP/1.0을 보낸다는 오래된 설명은 더 이상 안전한 일반 규칙이 아닙니다. Python 3.12는 http.client의 터널링을 HTTP/1.1로 바꾸고 Host 헤더가 제공되지 않을 때 자동으로 생성하는 기능을 추가했습니다.

그 변경은 문서화된 표준 라이브러리 구현에 속합니다. 상위 수준의 HTTP 라이브러리는 터널 동작을 재정의하거나 감쌀 수 있으므로 해당 라이브러리의 버전과 Python 버전을 모두 기록하십시오.

프록시가 터널을 거부하면 해당 클라이언트가 실제로 생성한 CONNECT 교환을 살펴보십시오. 대상 요청의 HTTP 버전을 바꾸거나 웹사이트 요청에 Host 헤더를 추가한다고 해서 이전 터널 요청이 반드시 바뀌지는 않습니다.

마찬가지로 오래된 Requests 어댑터 예제에서 비공개 필드를 편집하면 애플리케이션이 더 이상 쓰이지 않는 내부 API에 묶일 수 있습니다. 호환되고 지원되는 클라이언트와 런타임 조합, 그리고 문서화된 프록시 통합을 선호하십시오.

보고서에서 두 대화를 분리해 두십시오: 터널을 열기 위해 사용한 HTTP 요청, 그다음 그 안에서 대상과 협상한 프로토콜입니다. 둘은 서로 다른 버전을 사용할 수 있고 서로 다른 단계에서 실패할 수 있습니다.

관련 글