Cuando un cliente (una página web) realiza una llamada a un servidor, esto es lo que sucede:
- Se realiza una solicitud GET o POST desde el navegador a un dominio o IP
- Esto puede suceder porque hizo clic en un enlace, o a través de JavaScript (o algún marco JS), o se activó por otras acciones.
- Como ejemplo, cuando hace clic para responder una pregunta en Quora, aparece una ventana modal, probablemente propagada a través de una de estas llamadas, y del mismo modo, cuando se hace clic en “Enviar”, se realiza otra llamada.
- El dominio se resuelve en una IP a través de una serie de pasos (en los que no entraré), se asigna una ruta y la información que el navegador debe enviar se empaqueta en una SOLICITUD
- La SOLICITUD se transmite a un servidor web
- El servidor web es una pieza de software que se ejecuta en un servidor en algún lugar, ejemplos de esto incluyen Apache, NginX, etc.
- El servidor web pasa esta información a la aplicación web en función de la configuración de su servidor web
- Esto se hace a través de alguna interfaz de aplicación web, de las cuales hay muchas. Rails tiene tendencia a usar Passenger (que puede integrarse en NginX o agregarse a Apache); Django tiende a usar uWSGI, que puede agregarse a Apache o ejecutarse independientemente a través de su propio demonio independiente; Las aplicaciones J2EE se ejecutan en un contenedor de servlets como Tomcat, que, como uWSGI o gUnicorn (en Rails), pueden ejecutarse de forma independiente o recibir tráfico a través de un servidor web como Apache o NginX.
- Si esto es demasiado complicado para usted, en el 99% de los casos, el servidor web es algo así como Apache o NginX, y la aplicación web se monta utilizando un software que está integrado en el servidor web o con el que el servidor web se comunica a través de un socket.
- Algunas cosas, como los activos estáticos, pueden tener un paso de su servidor web para permitir el servicio de estos activos sin necesidad de comunicarse con la aplicación web en sí.
- Luego, la aplicación web enruta la solicitud de manera adecuada utilizando un enrutador de URL (en la mayoría de los casos), por ejemplo, el urls.py que encontraría en los proyectos de Django, o el route.rb que encontraría en Rails, que determina qué hacer con el solicitar una vez que llegue a la aplicación web.
- A partir de ahí, la solicitud se procesa y se devuelve directamente al consumidor.
- Esto a menudo incluye la interacción con una base de datos (modelo) o de otro tipo, y la solicitud puede devolverse en uno de muchos formatos, por ejemplo, JSON, XML, texto o HTML.