¿Qué partes de un sitio web deben hacerse estrictamente en el servidor y no en JavaScript?

Descargo de responsabilidad: soy un gran defensor de las aplicaciones de una sola página y escalado mediante el uso de la potencia informática del lado del cliente en lugar de la potencia informática del lado del servidor.

  1. Lógica de negocios. La lógica comercial especial solo debe estar en el servidor. Una regla general para los SPA es que cualquiera debería poder escribir una IU para su sitio y no tener que replicar ninguna lógica de negocios. La lógica en el SPA es cómo accede, visualiza y modifica los datos y no la lógica empresarial personalizada para su aplicación.
  2. Manejo de grandes cantidades de datos. Tenga en cuenta el uso de la palabra “muy”. El navegador moderno generalmente puede manejar más datos de los que un humano puede ver razonablemente (tenga en cuenta que estoy pensando en filas de tabla y no en visualizaciones complejas). El problema se convierte en el tamaño del DOM y eso es una preocupación del lado del cliente. El cliente puede retener datos y no generar DOM para ello. El servidor tiene la ventaja de ser una máquina robusta y también apátrida. Esto significa que para grandes datos procesará y luego liberará la memoria. Un buen ejemplo de esto es buscar a través de sus datos. Muchos sitios tienen una función de búsqueda y esto debería pasar por un índice del lado del servidor para generar un conjunto de resultados. El conjunto de resultados es lo que debe obtener el cliente.
  3. Actas. Si desea que las operaciones sean transaccionales, entonces querrá hacerlo en el servidor. Teóricamente podrías hacerlo en el cliente, pero estarías abriendo un mundo de dolor. Un ejemplo sería crear una entrada en la base de datos y enviar un correo electrónico. Solo quieres hacerlos si ambos tienen éxito.
  4. Validación. Irónicamente, la validación es una de las principales razones por las cuales las personas desean un código del lado del cliente, pero toda la validación debe ser del lado del servidor. Un subconjunto también puede ser del lado del cliente, pero este es un código replicado y nunca se debe confiar en él.
  5. Permisos y seguridad. Todo en el cliente no es seguro. Suponga que el usuario puede hacer cualquier cosa con los datos que tiene. Toda la lógica de permisos debe estar en el servidor y no debe enviar ningún dato al cliente que no esté destinado al cliente.

Estoy de acuerdo con la mayor parte de la respuesta de Peter Vukovic. Definitivamente y de todo corazón están de acuerdo con los puntos 1, 2 y 3.

Añadiría que cualquier fragmento de SQL o código que sugiera una estructura de datos interna en el servidor no debe exponerse en el navegador. Pase solo los datos necesarios para distinguir parámetros únicos, ponga toda la lógica para buscar o manipular datos antes de guardar (persistencia) los datos en el servidor. Esto hace que sea más difícil hackear tu base de datos. Los datos confidenciales no deben almacenarse en el navegador, almacenar datos confidenciales de estado como ID de usuario o SSN en el servidor y enviar un token asociado con ese dato confidencial al navegador y dejar que el navegador use el token para representar ese dato confidencial . Esta es la idea detrás de REST API, que contiene muchas ideas para las mejores prácticas. Una especificación de API alternativa para pasar solicitudes y datos es GraphQL.

El n. ° 4 y el n. ° 5 para mí suelen ser ciertos, pero hay excepciones dependiendo de las tecnologías que esté utilizando, la demanda (cuántas solicitudes por segundo), la tolerancia a la latencia (retraso), la cantidad de servidores que tiene, cómo su sistema maneja la carga equilibrio y cómo particiona su sistema.

Las nuevas tecnologías, como la biblioteca DOM virtual utilizada en ReactJS, hacen que la representación HTML sea muy rápida en el navegador. El uso de WebSockets hace que las múltiples llamadas API sean eficientes si su (s) servidor (es) web (s) pueden manejar muchas solicitudes simultáneas a la vez.

Más allá de la seguridad, el uso del servidor principal está relacionado con la gestión de datos. Por ejemplo, si crea una aplicación similar a twitter, el servidor manejará la cantidad de datos de todos los feeds de twitter y solo le enviará la pequeña cantidad de tweets que también ha suscrito.

Más allá de esto, la agregación de datos en alto volumen es más una tarea del servidor.

En resumen, el lado del cliente generalmente es para representar información, mientras que el lado del servidor es para almacenar / administrar / crear esta información

Todo lo que toca seguridad o rendimiento, pero más notablemente:

  1. Validación de datos. Si no lo haces del lado del servidor, te piratearán fácilmente.
  2. Permisos y control de acceso. Lo mismo que arriba.
  3. Mandando correos electrónicos. Ahora hay servicios web que le permitirán enviar correos electrónicos a través de JavaScript. Mala idea, ya que cualquier persona con un navegador puede usar su clave de acceso y enviar miles de correos electrónicos en su nombre.
  4. Llamadas encadenadas de API. Su servidor hará esto mucho más rápido.
  5. Representación de la página. Su servidor escupirá HTML mucho más rápido que cualquier marco de JavaScript. Cree aplicaciones de una sola página solo cuando los usuarios lo odien por no hacerlo.

Hay algunas reglas que parecen funcionar.

Todo lo relacionado con la interacción del usuario se realiza comúnmente en el cliente o en el navegador, simplemente porque enviar y reenviar formularios rellenados a medias y rechazarlos supone una gran cantidad de tiempo y recursos perdidos.

Por otro lado, a menudo hay datos involucrados que a menudo requieren inicio de sesión o alguna verificación de seguridad. Esto suele hacerse mejor en el servidor.

Un problema con el código del navegador son las versiones y las plataformas. No es tan fácil escribir todo tipo de cuñas, códigos y parches de versiones para manejar unos 10 navegadores, cada uno con 20 o más versiones activas. Como si todavía hubiera personas instalando Windows 7.

Las cosas que implican validación siempre se deben hacer (con una A mayúscula) en el servidor. He visto sitios que usan JavaScript para su autenticación o control de acceso y estos son triviales para evitar. Desea que se haga ese tipo de cosas en el servidor donde los delincuentes no pueden hackear su camino a cosas que no se les debe permitir hacer. Para el caso, cualquier cosa que implique generar consultas SQL también debería estar completamente en el servidor. Una vez vi una página donde se usaba JavaScript para generar una consulta SQL para llenar la página. Hable acerca de abrir la puerta para dar a cualquiera acceso gratuito a todos sus datos.

Por ejemplo, desea validar la fecha de nacimiento del usuario para la elegibilidad para votar. Puede validarlo fácilmente a través de JavaScript inmediatamente después de la entrada del usuario. Pero esto se puede hacer en el lado del servidor mirando la importancia del caso de negocios.