WebSockets и SPDY
По подразбиране YARP позволява проксиране на WebSocket и SPDY връзки. Тази поддръжка работи с
Проксиране на WebSockets и SPDY с YARP
Въведение
По подразбиране YARP позволява проксиране на WebSocket и SPDY връзки. Тази поддръжка работи както с директното препращане, така и с подхода с пълен конвейер (pipeline).
WebSockets е двупосочен поточен протокол, изграден върху HTTP/1.1 или по-нова версия, адаптиран за HTTP/2.
SPDY е предшественикът на HTTP/2 и обикновено се използва в средите на Kubernetes.
Надграждания на HTTP/1.1
WebSockets и SPDY са изградени върху HTTP/1.1, като използват функция, наречена надграждания на връзката (connection upgrades). YARP проксира първоначалната заявка и ако целевият сървър отговори със 101 Switching Protocols, надгражда връзката до непрозрачен, двупосочен поток, използвайки новия протокол. По този начин YARP не поддържа надграждане към други протоколи като HTTP/2.
HTTP/2
YARP поддържа WebSockets през HTTP/2, считано от .NET 7 и YARP 2.0. Kestrel е единственият наличен AspNetCore сървър, който приема входящи HTTP/2 WebSocket заявки, и тази поддръжка е активирана автоматично. Браузърите могат да засекат тази поддръжка, обявена от сървъра, и автоматично да преминат към HTTP/2.
Версиите на входящия и изходящия протокол не е нужно да съвпадат. Входящата WebSocket заявка може да е HTTP/1.1 или 2. Няма конфигурация, специфична за WebSockets, за изходящите заявки — YARP ще използва Version и VersionPolicy на ForwarderRequestConfig, за да определи коя изходяща версия да използва. По подразбиране те са HTTP/2 и RequestVersionOrLower.
WebSockets изискват различни HTTP заглавни части за HTTP/2, затова YARP добавя и премахва тези заглавни части при нужда, когато адаптира между различните версии.
След първоначалното установяване на връзката (handshake) WebSockets функционират по един и същ начин и при двете версии на HTTP.
Таймаут
Таймаутите за HTTP заявки (Http Request Timeouts, .NET 8+) могат да прилагат таймаути към всички заявки по подразбиране или чрез политика.
Тези таймаути се деактивират след установяване на WebSocket връзка (handshake). Те продължават да важат за gRPC
заявки. За допълнителна конфигурация вижте Timeouts.
Тази статия е създадена от автора с помощта на AI. Научете повече