

# Usar WebSockets com distribuições do CloudFront
<a name="distribution-working-with.websockets"></a>

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](using-managed-origin-request-policies.md#managed-origin-request-policy-all-viewer).
+ Encaminhe especificamente os cabeçalhos de solicitação `Sec-WebSocket-Key` e `Sec-WebSocket-Version` em sua política de solicitação de origem.

## Como o protocolo WebSocket funciona
<a name="distribution-working-with.websockets.how-it-works"></a>

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. As opções [Política de protocolo do visualizador](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) e [Protocolo (somente origens personalizadas)](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy) que você escolher para o CloudFront se aplicam a conexões WebSocket e também ao tráfego HTTP.

## Requisitos de WebSocket
<a name="distribution-working-with.websockets.requirements"></a>

Solicitações WebSocket devem estar em conformidade com a [RFC 6455](https://datatracker.ietf.org/doc/html/rfc6455) nos formatos padrão a seguir.

**Example Exemplo de solicitação de 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
```

**Example 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
<a name="distribution-working-with.websockets.recomended-settings"></a>

Para evitar problemas inesperados relacionados a compactação ao usar o WebSockets, recomendamos que você inclua os seguintes cabeçalhos em uma [política de solicitação para a origem](origin-request-create-origin-request-policy.md):
+ `Sec-WebSocket-Key`
+ `Sec-WebSocket-Version`
+ `Sec-WebSocket-Protocol`
+ `Sec-WebSocket-Accept`
+ `Sec-WebSocket-Extensions`

**nota**  
No momento, o CloudFront só permite conexões de WebSocket pelo protocolo HTTP/1.1.