¿Cuáles son las diferencias entre la programación del lado del servidor y del lado del cliente?

104

He visto preguntas (principalmente sobre Stack Overflow), que carecen de este conocimiento básico. El objetivo de esta pregunta es proporcionar buena información para quienes la buscan y para quienes hacen referencia a ella.

En el contexto de la programación web, ¿cuáles son las diferencias entre la programación del lado del servidor y la programación del lado del cliente? ¿Qué idiomas pertenecen a cuáles y cuándo utiliza cada uno de ellos?

Madara Uchiha
fuente
55
La programación del lado del servidor es escribir código que se ejecuta en el servidor, utilizando lenguajes compatibles con el servidor (como Java, PHP, C #; es posible escribir código que se ejecute en el lado del servidor en JavaScript). La programación del lado del cliente es escribir código que se ejecutará en el cliente, y se realiza en idiomas que el navegador puede ejecutar, como JavaScript.
FrustratedWithFormsDesigner
1
Este es bastante bueno: programmers.stackexchange.com/questions/138561/…
JeffO
77
Creo que debe incluir en la pregunta que se refiere solo a la programación web, ya que en el formulario actual las respuestas no están completas. Por ejemplo, la comunicación servidor-cliente no necesita hacerse en HTTP; lado del cliente podría no utilizar un navegador, etc.
K.Steff
@KSteff puedes editar mi pregunta para agregar eso.
Madara Uchiha
2
Cuando la web era joven, era una buena práctica poner la mayor parte de su carga pesada lógica en el lado del servidor (java / c ++) y mantener la lógica del navegador intencionalmente delgada, particularmente porque los navegadores en ese momento no estaban listos para el horario estelar. Ahora este énfasis se ha revertido de tal manera que las herramientas basadas en el navegador (Angular.js) son donde reside la mayor parte de la lógica de trabajo pesado de la aplicación web (lejos de la lógica del servidor cada vez más reducida). Esto ha sido facilitado por los navegadores modernos de fuerza industrial que ejecutan motores javascript extremadamente rápidos (dentro de un orden de magnitud del código nativo).
Scott Stensland el

Respuestas:

123

Antecedentes

El desarrollo web tiene que ver con la comunicación. En este caso, comunicación entre dos (2) partes, a través del protocolo HTTP:

  • El servidor : esta parte es responsable de servir las páginas.
  • El cliente : esta parte solicita páginas del servidor y las muestra al usuario. En la mayoría de los casos, el cliente es un navegador web .
    • El usuario : el usuario utiliza el Cliente para navegar por la web, completar formularios, ver videos en línea, etc.

La programación de cada lado se refiere al código que se ejecuta en la máquina específica, el servidor o el cliente.

Ejemplo básico

  1. El usuario abre su navegador web (el Cliente ).
  2. El usuario busca http://google.com .
  3. El Cliente (en nombre del Usuario ) envía una solicitud a http://google.com (el Servidor ) para su página de inicio.
  4. El servidor reconoce entonces la solicitud y responde al cliente con algunos meta-datos (llamados encabezados ), seguido de fuente de la página.
  5. El cliente recibe entonces fuente de la página, y hace en un sitio visible humano.
  6. El usuario escribe Stack Overflowen la barra de búsqueda y presionaEnter
  7. El cliente envía esos datos al servidor .
  8. El servidor procesa esos datos y responde con una página que coincide con los resultados de búsqueda.
  9. El Cliente , una vez más, presenta esa página para que el Usuario la vea.

Programación

Programación del lado del servidor

La programación del lado del servidor es el nombre general de los tipos de programas que se ejecutan en el servidor .

Usos

  • Proceso de entrada del usuario.
  • Compila páginas.
  • Estructura de aplicaciones web.
  • Interactuar con almacenamiento permanente (SQL, archivos).

Idiomas de ejemplo

  • PHP
  • Pitón
  • ASP.Net en C #, C ++ o Visual Basic.
  • Casi cualquier lenguaje (C ++, C #, Java). Estos no fueron diseñados específicamente para la tarea, pero ahora se usan a menudo para servicios web de nivel de aplicación.

Programación del lado del cliente

Al igual que en el lado del servidor, la programación del lado del Cliente es el nombre de todos los programas que se ejecutan en el Cliente .

Usos

  • Hacer páginas web interactivas.
  • Haga que las cosas sucedan dinámicamente en la página web.
  • Interactúa con el almacenamiento temporal y el almacenamiento local (Cookies, localStorage).
  • Enviar solicitudes al servidor y recuperar datos de él.
  • Proporcione un servicio remoto para aplicaciones del lado del cliente, como registro de software, entrega de contenido o juegos remotos para múltiples jugadores.

Idiomas de ejemplo

  • JavaScript (principalmente)
  • HTML *
  • CSS *
  • Cualquier idioma que se ejecute en un dispositivo cliente que interactúe con un servicio remoto es un idioma del lado del cliente.

* HTML y CSS no son realmente "lenguajes de programación" per-se. Son una sintaxis de marcado por la cual el Cliente representa la página para el Usuario .

Madara Uchiha
fuente
8
¡+1 para una buena respuesta con ejemplos de los usos! Solo para señalar: HTML y CSS en realidad no son lenguajes de programación, por lo que probablemente no deberían compararse con "PHP, ASP y casi cualquier lenguaje (C ++, C #, Java)". ActionScript podría ser otro buen ejemplo de un lenguaje del lado del cliente.
FrustratedWithFormsDesigner
55
No puede identificar por qué el servidor es un servidor y el cliente es un cliente. El cliente conoce el servidor, pero no al revés. Se espera que el servidor se ejecute en todo momento, no hay expectativas del cliente.
Chris McCall
3
Agregaría el hecho de que un entorno de servidor está más controlado. No tienes idea de qué es el cliente. También hay problemas de seguridad (para ambas partes) al hacer cosas del lado del cliente.
stonemetal
1
Así que agrégalo, siéntete libre.
Madara Uchiha
1
No estoy de acuerdo con la definición de @ ChrisMcCall hasta cierto punto. Puede haber excepciones a esa regla, como dónde un servidor puede confiar en un cliente para procesar datos o proporcionar un servicio al servidor para que el servidor complete una tarea. Los clientes también comparten una cantidad cada vez mayor de carga para la escalabilidad y el rendimiento, como en los SPA. Estas tecnologías difuminan esa definición. Una mejor definición podría ser que el usuario final y el cliente son sinónimos. Se espera que el usuario final exista en el dispositivo cliente, mientras que todos los demás nodos se considerarían del lado del servidor.
RyanJMcGowan
27

En palabras simples:

Aquí solo hablaré sobre programación web.

La programación del lado del cliente tiene que ver principalmente con la interfaz de usuario, con la cual el usuario interactúa. En el desarrollo web, es el navegador, en la máquina del usuario, el que ejecuta el código, y se realiza principalmente en javascript, flash, etc. Este código debe ejecutarse en una variedad de navegadores.

Sus tareas principales son:

  • validación de entrada (La validación debe hacerse en el servidor. Se podría usar una validación redundante en el cliente para evitar llamadas al servidor cuando la velocidad es muy crítica).
  • animación
  • manipulando elementos de la interfaz de usuario
  • aplicando estilos
  • algunos cálculos se realizan cuando no desea que la página se actualice con tanta frecuencia

La persona a cargo de la programación frontal debe saber :

  • javascript
  • css
  • HTML
  • diseño gráfico básico
  • Ajax
  • tal vez Flash
  • algunas bibliotecas de JavaScript de terceros como JQuery
  • Diseño de interfaz de usuario
  • diseño de información, etc.

La programación del lado del servidor tiene que ver con la generación de contenido dinámico. Se ejecuta en servidores. Muchos de estos servidores son "sin cabeza". La mayoría de las páginas web no son estáticas, buscan en una base de datos para mostrar al usuario información personalizada actualizada. Este lado interactúa con el back-end, como digamos, la base de datos.

Esta programación se puede hacer en muchos idiomas:

  • PHP
  • Java y jsp
  • áspid
  • Perl
  • Pitón
  • Ruby on Rails, etc.

Este código tiene que ver con:

  • Consultando la base de datos
  • Codificar los datos en html
  • Insertar y actualizar información en la base de datos
  • Reglas comerciales y cálculos

La persona a cargo de la programación del lado del servidor debe saber:

  • algunos de los idiomas mencionados anteriormente
  • HTML
  • SQL
  • secuencias de comandos de shell de Linux / Unix
  • OOP
  • reglas comerciales, etc.
Tulains Córdova
fuente
"La persona a cargo de la programación front end debe saber" ¿Debe? Diría que puedes sobrevivir perfectamente con solo HTML, CSS, Javascript y Ajax. Decir que la programación del lado del servidor tiene que ver con la generación de contenido dinámico y no decir lo mismo para el lado del cliente probablemente dará una intuición incorrecta ...
nbro
"La mayoría de las páginas web no son estáticas, buscan en una base de datos para mostrar al usuario información personalizada actualizada. Este lado interactúa con el back-end, como por ejemplo, la base de datos". Lo reformularía como: "Las páginas se generan dinámicamente al llenar las partes dinámicas con contenido variable que generalmente se obtiene de una base de datos. El back-end ya es todo lo relacionado con la programación del lado del servidor, IMO.
nbro
Nuevamente, en general, diría "... una persona debería saber ..." y no "debe" ...
nbro
@nbro ¿Por qué no escribes tu propia respuesta?
@ColeTrumbo ¿Cuál es la conexión entre mi comentario y el tuyo? ¿Pueden las personas criticar las respuestas de otros para mejorarlas?
nbro
14

Otras respuestas se han centrado en lo que es la programación del lado del cliente y del lado del servidor: qué lenguajes se utilizan principalmente, qué tareas deben realizarse, etc.

Esto es absolutamente correcto, pero extraño un poco el enfoque en cuáles son las diferencias entre ambos tipos de programación, en el contexto de la programación web. Déjame intentar abordar eso.

Seguridad y permisos

En la programación del lado del cliente, no tiene acceso al sistema completo debido a problemas de seguridad. El usuario no necesariamente confía en todos y cada uno de los códigos que se descargan de la web y se ejecutan en su máquina, y este es el objetivo principal del diseño del entorno del lado del cliente (el navegador y el motor de JavaScript): proporcionar un entorno aislado donde el código del cliente puede ejecutarse pero no puede acceder a nada fuera del alcance permitido.

En la programación del lado del servidor, es una buena práctica limitar también el acceso de cada aplicación al sistema subyacente, pero esto es mucho menos obligatorio para usted, ya que al final, usted o su empresa tienen el control de ese sistema. Este diseño de 'jaula aislada' no está integrado en las herramientas y lenguajes de programación del lado del servidor, sino que se logra a través de la configuración de la instalación (utilizando usuarios dedicados con permisos restringidos, eligiendo puertos que requieren o no requieren permisos de root, etc.).

Despliegue y plataforma

En la programación del lado del servidor, la implementación debe realizarse desde fuera de su código, utilizando algún tipo de herramienta (incluso si es make installo una git clone), y esta implementación generalmente es manual, o al menos, se espera que ocurra en un sistema semi-supervisado camino. El sistema (es decir, el sistema operativo) en el que se implementa generalmente es uniforme en varias máquinas, pero se puede personalizar en gran medida según sus necesidades.

En la programación del lado del cliente, la implementación se realiza desde el código del lado del servidor, que sirve a los clientes automáticamente y sin supervisión. El sistema subyacente (es decir, principalmente el navegador) puede ser muy diferente en un número mucho mayor de máquinas. Para que la implementación sea factible, se deben mantener los estándares y existe una tendencia mucho más fuerte hacia un solo idioma y entorno.

Es por eso que copiar el código del lado del servidor de una máquina a otra puede llevar semanas, mientras que el código del lado del cliente generalmente es trivial para ejecutarse en diferentes máquinas.

Estado y efectos secundarios

(Descargo de responsabilidad: este es, con mucho, el punto más subjetivo de todos. Probablemente hay muchos aspectos erróneos en mi argumentación. En mi opinión, es solo una hipótesis interesante).

En la programación del lado del servidor, el estado es una preocupación mucho mayor, es decir, cómo recuperar y actualizar datos a solicitud del usuario con la posibilidad de conflictos debido a la concurrencia. Incluso si la mayor parte de esta complejidad se descarga a un servidor de base de datos, es responsabilidad del código del lado del servidor permitir que la base de datos mantenga sus garantías sobre la integridad de los datos mediante el uso correcto de su interfaz (por ejemplo, no use un caché para actualizaciones que nunca son vistas por DB), mientras que también es un objetivo del código del lado del servidor no sobrecargar la base de datos con trabajo y mantener al usuario esperando respuesta.

En la programación del lado del cliente, presentar los resultados al usuario es una preocupación mucho mayor, y esto implica efectos secundarios (principalmente imprimir en la pantalla). Esto no quiere decir que no haya un estado involucrado (por ejemplo, cookies), solo que el objetivo principal del código es realmente interactuar con el usuario, y esto no puede suceder sin efectos secundarios.

Esta es la razón por la cual la programación del lado del cliente generalmente requiere (en algún momento) mirar la pantalla con una demostración, para verificar que todos los colores y el diseño sean correctos, mientras que la programación del lado del servidor puede ocurrir casi exclusivamente en un entorno orientado a texto, donde automatizado Las pruebas verifican que la lógica sigue haciendo lo que se supone que debe hacer.

logc
fuente
3

Esto de ninguna manera pretende ser una respuesta aceptada; más bien lo ofrezco como un punto complementario (en respuesta a la when do you use each of thempregunta) que aún no se ha mencionado en las otras respuestas hasta ahora, a saber:

Protección de la propiedad intelectual.

El código fuente que se encuentra en el lado del cliente (como en Javascript) es fácilmente legible y / o capaz de ingeniería inversa si se ha ofuscado.

Sin embargo, el código fuente que se encuentra en el lado del servidor puede proteger de manera segura los algoritmos propietarios y solo devolver el resultado; una especie de caja negra.

Kosta Kontos
fuente
Sí, pero ese no es realmente el punto más importante, el servidor está allí para el servidor, y el cliente está allí para recibir. La lógica se realiza mejor en el cliente (como un carrito de compras, no permite que el supermercado realice un seguimiento de su carrito de compras en todo momento, ¿verdad?), Y algunas se realizan mejor en el servidor (obtener información de la base de datos)
Madara Uchiha
@MadaraUchiha, de ahí el preámbulo: "Esto no pretende ser una respuesta aceptada, sino que lo ofrezco como un punto complementario"
Kosta Kontos
¿No debería ser esto parte de otra publicación entonces? Soy nuevo aquí, pero ¿no es preferible tener una respuesta completa que las dispersas?
Julix