HTTP 포워드 프록시의 경우 Gorilla의 Dialer.Proxy를 구성합니다. WebSocket URL은 계속 대상입니다:

proxyURL, err := url.Parse("http://proxy.example:8080")
if err != nil {
    return err
}
dialer := websocket.Dialer{
    Proxy: http.ProxyURL(proxyURL),
    HandshakeTimeout: 15 * time.Second,
}
conn, response, err := dialer.DialContext(
    ctx, "wss://events.example/stream", nil)

이 조각은 애플리케이션의 연결 함수에 속하며 net/url, net/http, time, github.com/gorilla/websocket을 사용할 수 있어야 합니다. err와 실패한 handshake 응답을 처리한 다음 일반적인 메시지 및 종료 수명 주기로 conn을 관리하세요. 허용된 공용 WSS 엔드포인트의 경우 HTTP 프록시 목록이 proxyURL 후보를 제공합니다.

HTTP 프록시 dialer는 중간 연결을 열고 대상에 대해 CONNECT를 보냅니다. wss의 경우 WebSocket handshake 전에 설정된 터널을 통해 대상 TLS가 진행됩니다.

NetDialContext는 하위 수준 TCP 연결을 사용자 지정합니다. 프록시 포트만 가리키는 것으로는 CONNECT가 구현되지 않습니다. Proxy도 설정된 경우 사용자 지정 네트워크 콜백이 중개자와 연결되고 프록시 계층이 협상을 처리합니다.

wss URL에 대상 호스트 이름을 유지하여 일반 TLS 신원 확인이 의도한 서버에 적용되도록 하세요.

관련 글