
그래서 저는 기본 프록시에 대해 알고 있으며, 프록시가 대상에 대한 연결을 투명하게 전달하는 방법도 알고 있습니다. 체인 연결 프록시가 어떻게 작동하는지 이해할 수 없었습니다.
예를 들어 다음과 같은 체인이 있습니다 proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination
.
일반적인 단일 프록시와 마찬가지로 요청은 프록시로 전송되고, 프록시는 이를 대상으로 전달하고 응답을 다시 보냅니다. 그러나 프록시 체인에서는 proxy1
요청을 대상 proxy2
으로 직접 전달하는 대신에 등으로 전달해야 한다는 것을 어떻게 알 수 있습니까?
요청을 다음 프록시로 전달하도록 프록시에 적절하게 지시하는 프록시 체인으로 보내는 요청의 일종의 헤더 때문인가요?
답변1
내 생각엔 대략"CONNECT" HTTP 메소드.
이 메커니즘에서 클라이언트는 HTTP 프록시 서버에 TCP 연결을 원하는 대상으로 전달하도록 요청합니다. 그런 다음 서버는 클라이언트를 대신하여 연결을 진행합니다. 서버에 의해 연결이 설정되면 프록시 서버는 계속해서 클라이언트와 TCP 스트림을 프록시합니다. 초기 연결 요청만 HTTP라는 점에 유의하세요. 그 이후에는 서버가 설정된 TCP 연결을 프록시하기만 합니다.
마지막 문장이 핵심이다.proxy1
에 대한 연결을 프록시하도록 요청합니다 proxy2
. 그런 proxy2
다음 이어지는 모든 내용은 proxy1
더 이상 해석되지 않으므로 프록시를 요청하면 proxy3
이 요청이 에 의해 포착되고 해석됩니다 proxy2
. 다음 CONNECT 요청(에 대한 프록시 proxy4
)은 및 를 통과 proxy1
하고 – 등에 proxy2
의해 해석됩니다 . proxy3
체인의 모든 프록시는정확히 하나CONNECT 요청을 하면 투명해집니다.
모든 프록시가 초기 패킷 순서에 따라 적절하게 설정된 후에는 양방향 TCP 연결을 사용하는 모든 것이 CONNECT 터널을 통해 전달될 수 있습니다.
조심하세요
모든 HTTP 프록시 서버가 이 기능을 지원하는 것은 아니며 지원하는 서버라도 동작을 제한할 수 있습니다.
최종 참고 사항: 실험하는 동안 실행하는 프로그램이 CONNECT 대신 GET을 사용하는 경우 프록시 연결에 문제가 발생할 수 있습니다. GET은 연결을 허용하지 않습니다. 이 부분은 다룹니다.여기. 프록시 체인에 대한 혼란은 GET 메커니즘에 더 익숙하기 때문일 수 있습니다.