Přehled podpory protokolu WebSocket ve službě Application Gateway
Application Gateway poskytuje nativní podporu protokolu WebSocket ve všech velikostech brány. Neexistuje žádné uživatelsky konfigurovatelné nastavení pro selektivní povolení nebo zakázání podpory protokolu WebSocket.
Protokol WebSocket standardizovaný v RFC6455 umožňuje úplnou duplexní komunikaci mezi serverem a klientem přes dlouhotrvající připojení TCP. Tato funkce umožňuje interaktivnější komunikaci mezi webovým serverem a klientem, což může být obousměrné bez nutnosti dotazování podle požadavků v implementacích založených na protokolu HTTP. Protokol WebSocket má nízkou režii na rozdíl od protokolu HTTP a může opakovaně používat stejné připojení TCP pro více požadavků a odpovědí, což vede k efektivnějšímu využití prostředků. Protokoly WebSocket jsou navržené tak, aby fungovaly přes tradiční porty HTTP 80 a 443.
K příjmu provozu Protokolu WebSocket můžete dál používat standardní naslouchací proces HTTP na portu 80 nebo 443. Provoz Protokolu WebSocket se pak přesměruje na back-endový server s povoleným webSocketem pomocí příslušného back-endového fondu, jak je uvedeno v pravidlech služby Application Gateway. Back-endový server musí reagovat na sondy služby Application Gateway, které jsou popsány v části přehledu sond stavu. Sondy stavu služby Application Gateway jsou pouze HTTP/HTTPS. Každý back-endový server musí reagovat na testy HTTP, aby služba Application Gateway směroval provoz Protokolu WebSocket na server.
Používá se v aplikacích, které využívají rychlou komunikaci v reálném čase, jako je chat, řídicí panel a herní aplikace.
Jak funguje WebSocket
K navázání připojení WebSocket se mezi klientem a serverem vyměňuje konkrétní metoda handshake založená na protokolu HTTP. V případě úspěchu se protokol aplikační vrstvy upgraduje z HTTP na WebSockets pomocí dříve vytvořeného připojení TCP. Jakmile k tomu dojde, HTTP je zcela mimo obrázek; data lze odesílat nebo přijímat pomocí protokolu WebSocket oběma koncovými body, dokud se připojení WebSocket neuzavře.
Poznámka:
Po upgradu připojení na WebSocket jako zprostředkující/ukončující proxy server služba Application Gateway jednoduše odešle data přijatá z front-endu do back-endu a naopak bez jakékoli kontroly nebo manipulace. Firewall webových aplikací (WAF) proto nemůže analyzovat žádný obsah a neprovádí žádné kontroly těchto dat. Podobně se po navázání připojení WebSocket nepoužijí všechny manipulace, jako jsou přepsání hlaviček, přepsání adresy URL nebo přepsání názvu hostitele v nastavení back-endu.
Konfigurační prvek naslouchacího procesu
Existující naslouchací proces HTTP lze použít k podpoře provozu Protokolu WebSocket. Následuje fragment kódu elementu httpListeners z ukázkového souboru šablony. K podpoře protokolu WebSocket a zabezpečení provozu Protokolu WebSocket budete potřebovat naslouchací procesy HTTP i HTTPS. Podobně můžete pomocí portálu nebo Azure PowerShellu vytvořit aplikační bránu s naslouchacími procesy na portu 80/443 pro podporu provozu Protokolu WebSocket.
"httpListeners": [
{
"name": "appGatewayHttpsListener",
"properties": {
"FrontendIPConfiguration": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/DefaultFrontendPublicIP"
},
"FrontendPort": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort443'"
},
"Protocol": "Https",
"SslCertificate": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/sslCertificates/appGatewaySslCert1'"
},
}
},
{
"name": "appGatewayHttpListener",
"properties": {
"FrontendIPConfiguration": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/appGatewayFrontendIP'"
},
"FrontendPort": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort80'"
},
"Protocol": "Http",
}
}
],
Konfigurace pravidla backendAddressPool, BackendHttpSetting a pravidla směrování
BackendAddressPool slouží k definování back-endového fondu se servery s povolenými webSockety. BackendHttpSetting je definovaný s back-endovým portem 80 a 443. Hodnota časového limitu požadavku v nastavení HTTP platí také pro relaci WebSocket. V pravidle směrování není nutná žádná změna, která slouží ke svázání příslušného naslouchacího procesu s odpovídajícím back-endovým fondem adres.
"requestRoutingRules": [{
"name": "<ruleName1>",
"properties": {
"RuleType": "Basic",
"httpListener": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpsListener')]"
},
"backendAddressPool": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
},
"backendHttpSettings": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
}
}
}, {
"name": "<ruleName2>",
"properties": {
"RuleType": "Basic",
"httpListener": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpListener')]"
},
"backendAddressPool": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
},
"backendHttpSettings": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
}
}
}]
Poznámka:
Ujistěte se, že je hodnota časového limitu větší než interval ping/pong definovaný serverem, abyste se vyhnuli chybám časového limitu před odesláním příkazu ping z klienta. Typická hodnota protokolu WebSocket je 20 sekund, takže například hodnota časového limitu 40 sekund zajistí, že brána neodešle chybu časového limitu před odesláním příkazu ping klientem; jinak by se na straně klienta zobrazila chyba 1006.
Back-end s povoleným protokolem WebSocket
Aby back-end fungoval, musí mít webový server HTTP/HTTPS spuštěný na nakonfigurovaném portu (obvykle 80/443). Tento požadavek je způsoben tím, že protokol WebSocket vyžaduje, aby počáteční metodu handshake byla HTTP s upgradem na protokol WebSocket jako pole hlavičky. Následuje příklad hlavičky:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Dalším důvodem je to, že back-endová sonda stavu služby Application Gateway podporuje pouze protokoly HTTP a HTTPS. Pokud back-endový server nereaguje na testy HTTP nebo HTTPS, dojde k jeho odebrání z back-endového fondu.
Další kroky
Jakmile se seznámíte s podporou protokolu WebSocket, přejděte na vytvoření aplikační brány , abyste mohli začít s webovou aplikací s povolenou webovou aplikací WebSocket.