Usar WebSockets com distribuições do CloudFront
O Amazon CloudFront oferece suporte ao uso de WebSocket, um protocolo baseado em TCP que é útil quando forem necessárias conexões bidirecionais de longa duração entre clientes e servidores. Uma conexão persistente normalmente é um requisito com aplicativos em tempo real. Os cenários nos quais convém usar Websockets incluem plataformas de bate-papo sociais, espaços de trabalho de colaboração online, jogos multijogador e serviços que fornecem dados em tempo real, como feeds de plataformas de transações financeiras. Os dados sobre uma conexão WebSocket pode fluir em ambas as direções para comunicação full-duplex.
A funcionalidade WebSocket é habilitada automaticamente para que funcione com qualquer distribuição. Para usar o WebSockets, configure uma das seguintes opções no comportamento do cache anexado à sua distribuição:
Encaminhe todos os cabeçalhos para sua origem. (É possível usar a política de solicitação de origem gerenciada do AllViewer.)
Encaminhe especificamente os cabeçalhos de solicitação
Sec-WebSocket-Key
eSec-WebSocket-Version
em sua política de solicitação de origem.
Como o protocolo WebSocket funciona
O protocolo WebSocket é um protocolo independente baseado em TCP que permite que você evite parte da sobrecarga, e possivelmente maior latência, de HTTP.
Para estabelecer uma conexão WebSocket, o cliente envia uma solicitação HTTP normal que usa semântica de atualização do HTTP para alterar o protocolo. O servidor pode concluir o handshake. A conexão WebSocket permanece aberta, e o cliente ou servidor pode enviar dados quadros entre si sem a necessidade de estabelecer novas conexões a cada vez.
Por padrão, o protocolo WebSocket usa a porta 80 para conexões WebSocket regulares e a porta 443 para conexões WebSocket sobre TLS/SSL. As opções Política de protocolo do visualizador e Protocolo (somente origens personalizadas) que você escolher para o CloudFront se aplicam a conexões WebSocket, bem como ao tráfego HTTP.
Requisitos de WebSocket
Solicitações WebSocket devem estar em conformidade com a RFC 6455
Exemplo de solicitação do cliente:
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
Exemplo de resposta de servidor:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
Se a conexão WebSocket for desconectada pelo cliente, servidor ou interrupção da rede, os aplicativos cliente deverão reiniciar a conexão com o servidor.
Cabeçalhos WebSocket recomendados
Para evitar problemas inesperados relacionados a compressão ao usar o WebSockets, recomendamos que você inclua os seguintes cabeçalhos em uma política de solicitação de origem:
-
Sec-WebSocket-Key
-
Sec-WebSocket-Version
-
Sec-WebSocket-Protocol
-
Sec-WebSocket-Accept
-
Sec-WebSocket-Extensions