# WebSocket Proxy

WebSocket, especificado na [RFC 6455](https://datatracker.ietf.org/doc/html/rfc6455), é um protocolo que mantém uma conexão TCP bidirecional aberta entre um cliente e um servidor, então os dois lados trocam dados em tempo real depois de um único handshake, sem reiniciar a conexão. **WebSocket Proxy** transporta essa conexão entre os seus usuários e a sua origem por meio de uma [aplicação](/pt-br/documentacao/plataforma/applications/), que funciona como um proxy reverso. Use-o para aplicações em tempo real, como jogos online, chat, notificações e streaming ao vivo. WebSocket Proxy serve quando o servidor WebSocket é a sua origem, porque a aplicação apenas transporta a conexão até ela. Quando uma função deve agir ela mesma como servidor ou cliente WebSocket, use a [WebSocket API](/pt-br/documentacao/devtools/runtime/api-reference/websocket/), que trata um upgrade do lado do servidor com `upgradeWebSocket()`.

---

## Disponibilidade

WebSocket Proxy está disponível para clientes com Business, Enterprise ou Mission-Critical Support, e para clientes com um contrato Reserved Capacity ou Saving Plan. Para solicitar acesso a WebSocket Proxy, entre em contato com o [Suporte Técnico](/pt-br/documentacao/suporte/).

## Suporte no cliente e na origem

Uma conexão WebSocket por meio de uma aplicação precisa de suporte nativo a WebSocket nas duas pontas: o cliente que abre a conexão e o servidor na origem. A maioria dos navegadores oferece suporte nativo a WebSocket. Para a lista de navegadores com suporte nativo, consulte [Can I use](https://caniuse.com/websockets).

## Headers de upgrade

Uma aplicação com WebSocket Proxy habilitado lê dois headers de requisição para decidir se uma requisição abre uma conexão WebSocket. Por padrão, ela trata toda requisição que carrega os dois headers, com os valores desta tabela, como uma conexão WebSocket e faz o proxy dela até a origem.

| Header       | Valor       |
| ------------ | ----------- |
| `Upgrade`    | `websocket` |
| `Connection` | `upgrade`   |

Quando o cliente envia um dos headers com outro valor, ou omite um deles, a aplicação não realiza o upgrade em direção à origem.

As regras de um firewall podem inspecionar uma requisição WebSocket antes que o upgrade seja concluído.

---

## Erros

Uma conexão WebSocket por meio de uma aplicação se completa com `101 Switching Protocols`. Qualquer outro status significa que o upgrade não foi concluído, mesmo um status das famílias de sucesso `2xx` ou `3xx`:

| Status                             | Causa                                                                | O que fazer                                                                                                                                                                                                                  |
| ---------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Qualquer status diferente de `101` | O cliente, a aplicação ou a origem não completou a conexão WebSocket | Verifique se o cliente e a origem oferecem suporte nativo a WebSocket, e se a requisição carrega os dois [headers de upgrade](/pt-br/documentacao/plataforma/applications/websocket/#headers-de-upgrade) com os seus valores |

---

## Limites

A Azion recicla as conexões keepalive nos seus servidores aproximadamente a cada 15 minutos, e pode encerrar uma conexão WebSocket ativa que fique aberta além desse tempo. A sua aplicação então precisa detectar a conexão encerrada e restabelecê-la. Para o tempo máximo de uma conexão WebSocket, e para saber como solicitar um limite maior para o seu plano, consulte [Limites de Applications](/pt-br/documentacao/plataforma/applications/limites/).

---

## Recursos relacionados

- [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos.md): A primeira aplicação, antes de você fazer o proxy de conexões WebSocket por meio dela.
- [Connectors](/pt-br/documentacao/plataforma/connectors.md): Onde são definidas as origens às quais uma aplicação envia requisições.
- [Depure regras](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/debug-regras.md): Como descobrir quais regras de uma aplicação são executadas em uma requisição.
- [Solucionar problemas de Applications](/pt-br/documentacao/plataforma/applications/solucao-de-problemas.md): Os sintomas que uma aplicação pode produzir, e como encontrar a causa deles.
