Uso de WebSockets con distribuciones de CloudFront
Amazon CloudFront admite el uso de WebSocket, un protocolo basado en TCP que resulta útil cuando se necesitan conexiones bidireccionales de larga duración entre clientes y servidores. Una conexión persistente suele ser un requisito con aplicaciones en tiempo real. Las situaciones en las que puede utilizar WebSockets incluyen plataformas de chat sociales, espacios de trabajo de colaboración en línea, juegos de varios jugadores, y servicios que proporcionan fuentes de distribución de datos en tiempo real como las plataformas de comercio financiero. Los datos a través de una conexión WebSocket pueden fluir en ambas direcciones para la comunicación de dúplex completo.
La funcionalidad WebSocket se habilita automáticamente para operar con cualquier distribución. Para usar WebSockets, configure una de las siguientes opciones en el comportamiento de caché que se adjunta a la distribución:
Reenviar todos los encabezados de solicitud de lector al origen. (Puede utilizar la política de solicitud de origen administrada por AllViewer).
Reenviar específicamente los encabezados de solicitud
Sec-WebSocket-Key
ySec-WebSocket-Version
en la política de solicitud de origen.
Cómo funciona el protocolo WebSocket
El protocolo WebSocket es un protocolo independiente, basado en TCP que le permite evitar cierta sobrecarga (y potencialmente mayor latencia) de HTTP.
Para establecer una conexión WebSocket regular, el cliente envía una solicitud HTTP que utiliza actualización de semántica de HTTP para cambiar el protocolo. El servidor puede completar el protocolo de enlace. La conexión WebSocket permanece abierta y el cliente o el servidor puede enviar marcos de datos entre sí sin tener que establecer nuevas conexiones cada vez.
De forma predeterminada, el protocolo WebSocket utiliza el puerto 80 para conexiones WebSocket regulares y puerto 443 para conexiones WebSocket sobre TLS/SSL. Las opciones que elija para su CloudFront Política de protocolo para lectores y Protocolo (solo orígenes personalizados) se aplican a conexiones WebSocket así como para el tráfico HTTP.
Requisitos de WebSocket
Las solicitudes de WebSocket deben cumplir con RFC 6455
Ejemplo de solicitud del 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
Ejemplo de respuesta de servidor:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
Si la conexión WebSocket la desconecta el cliente o el servidor, o mediante una interrupción de red, se espera que las aplicaciones cliente vuelvan a iniciar la conexión con el servidor.
Encabezados de WebSocket recomendados
Para evitar problemas inesperados relacionados con la compresión al utilizar WebSockets, le recomendamos que incluya los siguientes encabezados en una política de solicitudes de origen:
-
Sec-WebSocket-Key
-
Sec-WebSocket-Version
-
Sec-WebSocket-Protocol
-
Sec-WebSocket-Accept
-
Sec-WebSocket-Extensions