다음을 통해 공유


YARP 프록시 WebSockets 및 SPDY

소개

YARP는 기본적으로 WebSocket 및 SPDY 연결을 프록시할 수 있도록 합니다. 이 지원 기능은 직접 전달전체 파이프라인 방법 모두에 적용됩니다.

WebSockets 는 HTTP/1.1 이상을 기반으로 하는 양방향 스트리밍 프로토콜로 , HTTP/2에 맞게 조정됩니다.

SPDY HTTP/2의 전구체이며 Kubernetes 환경에서 일반적으로 사용됩니다.

HTTP/1.1 업그레이드

WebSocket 및 SPDY는 연결 업그레이드라는 기능을 사용하여 HTTP/1.1을 기반으로 빌드됩니다. YARP는 초기 요청을 프록시하고 대상 서버가 101 Switching Protocols응답하는 경우 새 프로토콜을 사용하여 불투명 양방향 스트림으로 연결을 업그레이드합니다. YARP는 HTTP/2와 같은 다른 프로토콜로의 업그레이드를 지원하지 않습니다.

HTTP/2

YARP는 .NET 7 및 YARP 2.0부터 HTTP/2 WebSocket을 지원합니다. Kestrel 들어오는 HTTP/2 WebSocket 요청을 수락하고 해당 지원이 자동으로 사용하도록 설정되는 유일한 사용 가능한 AspNetCore 서버입니다. 브라우저는 서버에서 보급된 이 지원을 감지하고 자동으로 HTTP/2로 전환할 수 있습니다.

들어오고 나가는 프로토콜 버전이 일치할 필요가 없습니다. 들어오는 WebSocket 요청은 HTTP/1.1 또는 2일 수 있습니다. 보내는 요청에 대한 WebSockets와 관련된 구성은 없습니다. YARP는 ForwarderRequestConfig버전 및 VersionPolicy를 사용하여 사용할 아웃바운드 버전을 결정합니다. 이러한 기본값은 HTTP/2 및 RequestVersionOrLower입니다.

WebSocket에는 HTTP/2에 대해 서로 다른 HTTP 헤더가 필요하므로 YARP는 다른 버전 간에 적응할 때 필요에 따라 이러한 헤더를 추가하고 제거합니다.

초기 핸드셰이크 후 WebSockets는 두 HTTP 버전에서 동일한 방식으로 작동합니다.

타임 아웃

Http 요청 시간 제한(.NET 8 이상)은 기본적으로 또는 정책에 따라 모든 요청에 시간 제한을 적용할 수 있습니다. 이러한 시간 제한은 WebSocket 핸드셰이크 후에 사용하지 않도록 설정됩니다. gRPC 요청에는 계속 적용됩니다. 추가 구성은 시간 제한참조하세요.