2 votos

¿Cuáles son las consecuencias de deshabilitar la función experimental NSURLSession WebSocket en Safari?

Me dijeron que desactivara la función experimental de Websocket de NSURLSession para solucionar un supuesto error de Safari. Hacerlo solucionó mi problema, pero quiero asegurarme de que no tenga consecuencias no deseadas. ¿Cuáles son las implicaciones de desactivar esa función experimental? La configuración se puede encontrar en Configuración -> Safari -> Avanzado -> Funciones Experimentales -> NSURLSession WebSocket. Viene habilitada de forma predeterminada.

Mi caso específico involucra al cliente web IRC gamja utilizado en https://chat.sr.ht. Puedo usarlo bien en otros navegadores, como Firefox en macOS, pero cuando inicio sesión en el cliente en Safari en iOS, tengo desconexiones y reconexiones constantes. Pedí ayuda a sr.ht y me dijeron que el problema era un error de Safari y que desactivara esta función. Sin embargo, cuando pregunté si había otras consecuencias por hacerlo, nadie parecía saber.

Veo muchos consejos en línea para desactivar esta función para solucionar diversos problemas con todo, desde cámaras IP hasta Coinbase Pro y Slack. Algunas fuentes afirman que el problema se soluciona con las últimas actualizaciones de software, pero estoy en el último iOS y desactivar la función sí solucionó mi problema, así que no estoy seguro si mi problema es diferente o si el problema no está realmente solucionado.

¿Qué hace esta función cuando está habilitada, y romperé algo más si la desactivo?

Actualización iOS 17

Esto ya no está disponible como un interruptor y parece estar activado todo el tiempo.

2voto

Jose Chavez Puntos 645

Probablemente no hay consecuencias al apagarlo (además de solucionar el problema en el que te encuentras).

La historia larga:

WebSocket es un protocolo de red utilizado por los navegadores para permitir que las páginas web tengan comunicación bidireccional y de larga duración con un servidor compatible. Un ejemplo de uso podría ser una aplicación de chat que permite enviar y recibir mensajes de chat a través de la conexión WebSocket, sin tener que abrir constantemente nuevas conexiones para comprobar nuevos mensajes.

NSURLSession es una API (interfaz de programación de aplicaciones) proporcionada por Apple para que los desarrolladores faciliten las transferencias de datos. Normalmente se utiliza para tareas como descargar imágenes y otros datos en las aplicaciones. Soporta varios protocolos como HTTP, FTP y otros. Apple ha extendido eso con soporte para el protocolo WebSocket en iOS 13, según recuerdo.

Recientemente, Apple ha impulsado a los desarrolladores en la dirección de utilizar NSURLSession para todas sus necesidades de transferencia de datos, en lugar de que cada aplicación implemente esto por sí misma. Esto probablemente se deba al hecho de que NSURLSession maneja mucha funcionalidad que es muy útil para los usuarios, pero que en muchos casos podría ser omitida por desarrolladores de terceros. Cosas como manejar descargas cuando la aplicación está en segundo plano, priorizar las descargas dentro de una aplicación y entre aplicaciones, garantizar una seguridad adecuada durante el transporte, reducir el uso de energía, etc.

Muchas aplicaciones incorporan un navegador web dentro de su aplicación. Esto se hace típicamente a través de la API de WKWebView de Apple. Históricamente, la API de WKWebView admitía WebSocket a través de su propia implementación.

La configuración experimental en esta pregunta es simplemente sobre si quieres usar la antigua implementación de WebSocket incluida en WKWebView, o si prefieres la nueva implementación de WebSocket incluida en NSURLSession.

Básicamente, probablemente querrías la nueva implementación, a menos que tenga algún error que Apple aún no haya corregido y que te esté molestando. Por eso Apple lo ha mantenido como experimental y te ha dado la posibilidad de configurar la elección de la implementación.

El error en cuestión parece ser que la nueva implementación tiene una forma diferente de implementar (quizás erróneamente) paquetes de datos fragmentados cuando la compresión está habilitada. Es decir, si se envía un trozo muy grande de datos a través de WebSocket, no se puede enviar en un solo paquete de datos y debe dividirse en varios paquetes.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X