🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • World Wide web
  • Direcciones URL
  • Protocolo HTTP
  • HTTP Status codes
  • Protocolo HTTPS (seguro)
  • Arquitecturas web
  • Clásica (Cliente/Servidor)
  • Stacks web
  • Conceptos sobre servidores web
  • Escalabilidad
  • Alta disponibilidad y Balanceo de carga
  • Rendimiento (Performance)
  • Conceptos sobre Seguridad
  • Hosting
  • Web frameworks
  1. Servicios

Web

A menudo se confunde la World Wide Web con Interneto las propias paginas web y estos en realidad son una de las aplicaciones que Internet ofrece; sin embargo la sociedad actual no se concibe sin estos

A la hora de afrontar un nuevo proyecto web, es importante tener una visión general del conjunto de elementos que interactúan (servidores, balanceadores, tipo de aplicación, cortafuegos, etc..).

A continuación vamos a ver una serie de conceptos, que te ayudarán a entender el funcionamiento general de distintas arquitecturas web y entender que es un servidor web.


World Wide web

La World Wide Web, habitualmente conocida como WWW o como Web, y que podríamos traducir como Red Mundial, es un entramado de documentos a escala planetaria escritos en un fotmato de texto denominado hipertexto. Cualquier usuario de la WWW puede crear su pagina web, ponerla a disposición de otros usuarios y establecer enlaces a cualquier parte de la Web.

El lenguaje basado en hipertexto más conocido es el lenguaje HTML (Hyper- Text Markup Language, Lenguaje de Marcas de Hipertexto) sirviéndose de un reducido conjunto de etiquetas estructurales y semánticas apropiadas para la realización de documentos relativamente simples y que luego se han hecho mas complejas para adaptar HTML a las nuevas posibilidades de la Web, como la posibilidad de usar elementos multimedia o la utilización de elementos dinámicos (animaciones Java, uso de Flash, controles ActiveX, etc.) que hacen las páginas web mucho más llamativas e interactivas para el usuario.

Direcciones URL

(Uniform Resources Locator)

Según la RFC1738, un Localizador Uniforme de Recursos (URL) no es más que una secuencia de caracteres, de acuerdo a un formato estándar, que se usa para nombrar recursos para su localización. Las URL no son pues más que las direcciones de los distintos recursos de Internet, es decir, de las distintas páginas web. A continuación tienes un esquema típico y ejemplos:

Protocolo://<usuario>:<contraseña>@<maquina>:<puerto>/<ruta-de-url>

Ejemplo)
ftp://fulanito:@host.com/
http://www.google.es/
http://www.dte.us.es:80/docencia/etsii/ii/
ssh://fulanito@amazon.es:2021/

Protocolo HTTP

El Protocolo de Transferencia de Hipertexto (HyperText Transfer Protocol, HTTP) es un protocolo de nivel de aplicación para sistemas de información distribuidos que lleva siendo utilizado en la WWW desde 1990.

El protocolo HTTP permite el intercambio de información hipertextual (enlaces) en las páginas web. Se trata de un protocolo genérico orientado a objetos. Una de sus características principales es la independencia en la visualización y presentación de los datos, lo que permite que los sistemas se construyan independientemente del desarrollo de nuevos avances en la representación de los datos. Para visualizar los datos de la Web se precisa de un navegador instalado en la máquina del cliente. En el protocolo HTTP existen una serie de características tales como:

  • El protocolo HTTP está fundado en un modelo cliente/servidor.

  • Para la comunicación, se establece en una conexión TCP a través del puerto 80 (puerto por defecto).

  • La comunicación HTTP está basada en mensajes solicitud/respuesta en formato ASCII.

Por tanto, una sesión HTTP es una secuencia de transacciones solicitud/ respuesta. Un cliente HTTP inicia una petición, estableciéndose una conexión TCP a un puerto del host (habitualmente el 80). Un servidor HTTP espera el mensaje de petición del cliente en dicho puerto.

Para recibir la petición, el servidor devuelve una línea de estado, como "HTTP/1.1 200 OK" y un mensaje propio cuyo cuerpo es, por ejemplo, el recurso solicitado, un mensaje de error, o alguna otra información.

El mensaje de solicitud consiste en lo siguiente:

  • Línea de solicitud (por ejemplo, GET HTTP/1.1/images/logo.gif), la cual solicita un recurso llamado /images/logo.gif del servidor.

  • Cabeceras (por ejemplo, Accept-Language: en).

  • Una línea vacía.

  • Un cuerpo de mensaje opcional.

La línea de solicitud y la cabecera deben acabar con <CR> <LF> (es decir, un retorno de carro seguido de un fin de línea). La línea vacía debe consistir en solo <CR> <LF>.

En HTTP, se definen ocho de los denominados métodos, los cuales indican la acción que se desea que sea realizada sobre el recurso identificado. Los métodos definidos son los siguientes:

Solicitud
Descripción

GET

Solicita una representación del recurso especificado. Mediante este método el cliente solicita, por ejemplo, una página HTML (index. html) o una imagen (foto.jpg).

HEAD

pide una respuesta idéntica a la que que correspondería a una petición GET, pero sin el cuerpo de respuesta (es decir, sin que nos devuelvan la página HTML o la imagen, por ejemplo). Es útil para recuperar la información escrita en cabeceras de respuesta, sin necesidad de llevar el contenido entero.

POST

envía datos para ser procesados (por ejemplo, un documento HTML) al recurso identificado Los datos se incluyen en el cuerpo de la petición. Esto puede causar la creación de un nuevo recurso y/o las actualizaciones de recursos existentes. POST puede usarse para enviar a un servidor web los datos de un formulario.

PUT

carga una representación del recurso especificado.

DELETE

suprime el recurso especificado.

TRACE

provoca que el servidor devuelva en la respuesta la petición recibida. Se suele usar para tareas de diagnóstico.

OPTIONS

devuelve los métodos HTTP que el servidor suministra para un URL especificado. Puede usarse para comprobar la funcionalidad de un servidor web solicitando " * " (all) en vez de un recurso específico.

CONNECT

convierte la conexión de solicitud en un túnel transparente TCP/IP, por lo general para facilitar la comunicación SSL cifrada (el denominado protocolo HTTPS, que veremos más adelante) a través de un proxy HTTP no encriptado.

  • Las peticiones y las repuestas llevarán unas cabeceras y, opcionalmente, un contenido (datos).

  • Primero se descarga la página, y luego cada gif u objeto que haya en ella.

  • Cada petición es independiente; si se usa HTTP/1.0 se hace en conexiones TCP distintas, si se usa HTTP/1.1 se puede hacer varias en una misma conexión.

En la cabecera se mostrará la siguiente información:

  • Host

  • User-agent

  • Server

  • Cache-control

  • Content-type

  • Content-Encoding

  • Expires: tiempo de expiración del recurso solicitado.

  • Location

  • Set-Cookie

Aquí tienes un ejemplo:

Solicitud: 
GET/index.html HTTP/1.0 
From: yo@miHost.com 
User-Agent: HTTP Tool/1.0 
[Linea en blanco] 

Respuesta: 
HTTP/1.0 200 OK 
Date: Mon, 23 May 2005 23:59:59 GMT 
Content-Type: text/html 
Content-Length: 1221 
<html> 
<body> 
<h1>Página principal</h1> (Contenido)...
</body> 
</html> 

Más info sobre HTTP:

HTTP Status codes

Desde la introducción de HTTP/1.0, la primera línea de la respuesta HTTP se denomina línea de estado e incluye un código de estado numérico (por ejemplo, 404) y una frase explicativa textual (por ejemplo "No encontrado"). Estas son las estándar que pueden ser cambiadas en todo caso por el desarrollador web si así lo quisiera:

Protocolo HTTPS (seguro)

El Protocolo de Transferencia de Hipertexto Seguro (HyperText Transfer Protocol Secure, HTTPS) es una combinación del Protocolo HTTP con el protocolo SSL/TLS (Secure Sockets Layer, Protocolo de Capa de Conexión Segura; y Transport Layer Security, Seguridad de la Capa de Transporte) para proporcionar el cifrado y la identificación segura del servidor. Las conexiones HTTPS se usan, por ejemplo, para transacciones de pago en la WWW o para transacciones confidenciales en sistemas de información corporativos.

Conceptualmente, HTTPS es muy simple. Simplemente HTTP usa los servicios de SSL o TLS tal como se usa HTTP sobre TCP. El cliente HTTP también debe actuar como cliente SSL/TLS, iniciando una conexión al servidor sobre el puerto apropiado y enviando un ClientHello para el establecimiento de la conexión SSL/TLS. Una vez que el establecimiento SSL/TLS ha terminado, el cliente entonces puede iniciar la primera petición HTTP.

El primer dato que un servidor HTTP espera recibir del cliente es una petición de línea. Por otro lado, el primer dato que un servidor TLS/SSL espera recibir es el ClientHello. Por consiguiente, la práctica común es correr HTTP/ TLS sobre un puerto distinto para distinguir el protocolo que se usa. Cuando HTTPS funciona sobre una conexión TCP/IP, el puerto por defecto es 443. Esto no excluye que HTTPS pueda ir sobre otro protocolo de transporte, ya que TLS solo presupone que exista una conexión fiable.

El formato de los URL es el mismo pero cambiando el protocolo:

https://www.ejemplo.com/-garcia/home.html 

Antes de continuar, es necesario recordar algunos conceptos importantes en el intercambio de información seguro:

  • Claves: se utilizan para cifrar y descifrar mensajes, de manera que aumente la seguridad en la comunicación. Si se usa la misma clave para cifrar y descifrar mensajes, se habla de criptografía simétrica. El problema de este sistema es que emisor y receptor han de intercambiarse las claves, por lo que el sistema no es del todo seguro, para ello, surge la criptografía asimétrica, que es la que usan TTL y SSL, en la que existen dos claves diferentes: una clave pública, que puede entregarse a cualquier usuario; y una clave privada, que es guardada por el propietario, sin que nadie tenga acceso a ella. Cuando el emisor usa su clave pública para cifrar el mensaje, solo el receptor, que posee una clave privada asociada, puede descifrar el mensaje. Por otra parte, cuando el propietario utiliza su clave privada para cifrar el mensaje, cualquier usuario puede descifrarlo con su clave pública, de manera que se sabe quién es el remitente. Un ejemplo de utilización de este tipo de criptografía es la firma electrónica.

  • Certificados: el inconveniente que presenta el sistema anterior es que si alguien corrompe la clave pública, reemplazándola por la suya propia, podría descifrar los mensajes del emisor. Un certificado permite asociar una clave pública con una entidad para garantizar su validez. El certifi- cado es como una tarjeta de identificación de la clave, emitido por una entidad llamada Autoridad de certificación (CA, Certification Authority). La estructura de los certificados viene determinada por la norma X.509. Los certificados se utilizan principalmente en tres tipos de contextos: los certificados de cliente se almacenan en la estación de trabajo del usuario o se integran en un contenedor como una tarjeta inteligente, y permiten identificar a un usuario y asociarlo con ciertos privilegios; los certificados de servidor se instalan en un servidor web y permiten conectar un servicio con el dueño del servicio. En el caso de página web, permiten garantizar que la dirección URL de la página web y especialmente su do- minio pertenecen realmente a una empresa determinada. También permiten proteger las transacciones con usuarios gracias al protocolo SSL; los certificados VPN (Red privada virtual) se instalan en un equipo de red y permiten cifrar flujos de comunicación de extremo a extremo entre dos puntos (por ejemplo, dos ubicaciones de una empresa).

  • Autenticación: su objetivo es limitar el acceso a un servidor web únicamente a usuarios autorizados. Esto se suele realizar mediante la introducción de un nombre de usuario y contraseña. En sitios administrados mediante certificados, el administrador del sitio crea un certificado para cada usuario, el cual es guardado dentro de su navegador. Normalmente, el certificado contiene el nombre y la dirección de correo del usuario autorizado y se revisa automáticamente en cada conexión para verificar la identidad del usuario sin que tenga que ingresar su contraseña cada vez.

Arquitecturas web

Clásica (Cliente/Servidor)

Un cliente (Navegador, Webview) solicita un documento a un servidor . El servidor lo procesa y devuelve un documento al cliente. Implica varias características:

  • Recarga de página por cada petición.

  • Renderizado del documento en el servidor. El servidor entrega el documento con todo el marcado HTML. Es por esto por lo que las “arañas” de los motores de búsqueda, pueden indexar contenido.

  • Puede haber o no sesión.

Una aplicación web también se puede definir como una aplicación software codificada en un lenguaje soportado por un navegador (como, por ejemplo, HTML, JavaScript, Java, ASP.NET, etc.) y que reside en un navegador web común, constituyendo una aplicación ejecutable. Aplicaciones web típicas se utilizan para correo web, comercio y subastas online, gestores de contenidos (wikis) y muchas otras funciones. Para realizar una aplicación web, existen diversos conceptos (pulsa encima de ellos para saber más):

Aplicación web
Función

Permite a un cliente (navegador web) solicitar datos de un programa ejecutado en un servidor web.

, , ,

Generan páginas web de forma dinámica a partir de los parámetros de la petición que envíe el navegador web.

Creación de aplicaciones web interactivas.

Administración de contenidos en páginas web. Por ejemplo, Wordpress o Joomla

, ,

Sistema gestor de base de datos relacional

Servidor web de código abierto

Conjunto de servicios web de Windows

En cuanto a su estructura, las aplicaciones se dividen en partes lógicas denominadas capas, teniendo cada capa un papel diferente. Las aplicaciones clásicas constan únicamente de una capa, la cual reside sobre la máquina del cliente, aunque, a medida que aumenta la complejidad de la aplicación se tiene a un modelo de N capas. La estructura más común es la aplicación de tres niveles. En su forma más habitual, las tres capas se denominan:

  • Capa de presentación: consiste en un navegador web.

  • Capa de aplicación: suele constar de un motor que usa alguna tecnología dinámica de contenido web (como ASP, ASP.NET, CGI, ColdFusion, JSP/Java, PHP, Perl, Python, Rubi on Rails o Struts2).

  • Capa de almacén de datos: se trata de una base de datos.

El navegador web envía peticiones a la capa intermedia (capa de aplicación), la cual le presta servicios mediante la realización de peticiones, se actualiza con la base de datos y genera una interfaz de usuario.

Stacks web

Se llama Stack a un conjunto de tecnologías que se escogen como herramientas para implementar la solución de un proyecto. Generalmente se usan para dar una descripción de la arquitectura de un modo rápido.

Veamos algunos ejemplos:

La elección de una arquitectura u otra resultará de las condiciones del proyecto, los conocimientos de los programadores y el servicio concreto que se quiera dar. Las arquitecturas que diferenciamos a nivel cliente-servidor son:

RIA (Rich Internet Application)

Son aplicaciones de Escritorio ejecutadas en el contexto de un navegador.

El concepto básico para diferenciarlo de una arquitectura clásica es el uso AJAX para evitar recargas de página, y el aumento de protagonismo de Javascript y CSS para pasar de un documento de presentación a una interfaz más interactiva.

Las interfaces de usuario RIA normalmente se desarrollan utilizando HTML5 + JavaScript + CSS3, Flex (Flash), JavaFX, GWT, Dart o alguna otra herramienta RIA. Aunque se han impuesto las variaciones de HTML5 + JavaScript + CSS3 parecen ser las ganadoras (GWT y Dart se pueden compilar en JavaScript).

El hecho de mantener la lógica de la app separada de la GUI significa varias cosas:

  • Las GUI pueden volverse mucho más avanzadas con las tecnologías RIA.

  • El tiempo de CPU necesario para generar la GUI se elimina del servidor, liberando más ciclos de CPU para ejecutar la lógica de la aplicación.

  • El estado de la GUI se puede mantener en el navegador, "limpiando" así aún más el lado del servidor de las aplicaciones web RIA y ofreciendo algo más de seguridad.

  • Resulta más fácil desarrollar componentes de GUI reutilizables, que pueden reutilizarse sin importar qué lenguaje de programación del lado del servidor se utilice para la lógica de la aplicación.

  • Las tecnologías RIA normalmente se comunican con el servidor web mediante el intercambio de datos, no de código GUI (HTML, CSS y JavaScript). El intercambio de datos suele ser XML enviado a través de HTTP o JSON enviado a través de HTTP. Esto cambia el lado del servidor de ser "páginas" a "servicios" que realizan alguna parte de la lógica de la aplicación (crear usuario, iniciar sesión, almacenar tareas, etc.). Cuando el lado de su servidor queda completamente libre de generar GUI, la lógica de su aplicación se vuelve muy clara.

  • Dado que la GUI y la lógica de la aplicación en el servidor generalmente se comunican a través de HTTP + JSON o HTTP + XML, la GUI es 100% independiente del lenguaje de programación que se utiliza en el servidor. La interfaz de la lógica GUI con el servidor son solo llamadas HTTP.

  • Facilita el uso e implementación de las APIs y la integración con iOS o Android.

SPA (Single Page Application)

La idea fundamental por la que surgieron las SPA’s fue algo ya basado en las RIA’s, que es el concepto de evolucionar el estado de una aplicación en base sólo a los datos del servidor y no a la vista renderizada del servidor ( marcado + datos injectados).

  • Manejo del Histórico de navegación en el cliente mediante los ficheros de renderización iniciales.

  • Presenta un problema para el SEO, ya que ya no se renderizan todas las páginas en el servidor, sólo la primera y si el javascript no lo detecta el crawler, no funcionará.

Algunas tecnologias que usan SPA:

  • Frameworks de JavaScript para los navegadores web como AngularJS, Ember.js, Meteor.js, Vue.js, ExtJS y React han adoptado los principios de SPA.

  • AJAX

  • Websockets

Referencias:


Conceptos sobre servidores web

Escalabilidad

La escalabilidad hace referencia a la capacidad de un sistema de crecer.

Concepto
Escalabilidad vertical
Escalabilidad horizontal

Descripción

Escalado mediante el uso de recursos de hardware más potentes.

Escalado en base a más máquinas menos potentes se distribuyan la carga del trabajo a realizar.

Escalable

  • CPU’s con más cores o más potentes

  • Mayor cantidad de RAM o más rápida

  • Disco (SSD)

  • Mayor Ancho de Banda

Más servidores y máquinas o mejores componentes de red

Depende del caso, pero generalmente implica menor coste que un escalado vertical.

Desventajas

  • Mayor coste

  • Puede implicar parada o degradación de servicio

  • Pérdida de cierto control, si se delega en servicios a terceros, dependiendo del grado de flexibilidad que ofrezcan

  • Puede implicar degradación de servicio

  • Balanceo de Carga

  • Coordinación de las sesiones de usuario en caso de haberlas (Sticky Sessions) o algún mecanismo para que iniciada una transacción entre cliente y servidor que consta de varias peticiones, toda la transacción sea atómica (todas las peticiones vayan al mismo servidor).

Alta disponibilidad y Balanceo de carga

La alta disponibilidad consiste en garantizar que siempre haya al menos un mínimo de elementos de la arquitectura para poder procesar correctamente una “petición”. Aquí aparecen los conceptos de redundancia y evitar SPOF.

El balanceo de carga consiste en distribuir la carga de (tráfico, consultas a la base de datos…) entre distintos elementos de la arquitectura. El balanceo puede hacerse mediante hardware (más caro pero más fiable) o mediante software (más flexible pero exige un conocimiento mayor).

Rendimiento (Performance)

La mejora de rendimiento de una aplicación o servicio depende de muchos factores. NO hay soluciones universales.El rendimiento suele ir ligado a la velocidad, pero también es importante la percepción de la velocidad.

Puedes tener perfectamente configurado un backend y que tu aplicación parezca lenta. Los navegadores a veces te pueden jugar una mala pasada si no sabes cómo funciona un navegador.

Conceptos sobre Seguridad

Todo servicio expuesto en Internet puede ser vulnerable a ataques de distinta naturaleza. Si somos nosotros los que administramos el servicio, debemos preocuparnos de estar preparados ante ciertos ataques como:

  • DOS y DDOS: Denegación de servicio. Se produce por saturación de peticiones.

  • XSS y SQL Injection: Sucede cuando no se comprueban y "sanitizan" las entradas (vía formulario generalmente) en nuestra web.

Más info:

Hosting

Dentro de la elección de hosting tenemos muchas alternativas dependiendo de qué tipo de servicios necesitamos, con cuánto presupuesto contemos y otros servicios. Una clasificación a grosso modo podría ser la siguiente:

  • Tradicional

  • VPS ( Servidor Privado Virtual)

  • Plesk / Cpanel ( Nada recomendables, muy poco flexibles )

  • PAAS / IAAS

    • Azure (Microsoft)

    • AWS (Amazon)

    • DigitalOcean

    • OpenStack

  • PAAS

    • Heroku / Modulus

  • Homing

Cabe destacar los siguientes usos para las cookies:

  • Gestión de sesiones

  • Personalización

  • Seguimiento

  • Cookies de terceros

Web frameworks

Los web frameworks son un conjunto de abstracciones sobre operaciones comunes en la construcción de una aplicación web. Muchos frameworks se escriben en un determinado lenguaje de programación, ya que esto permite aprovechar el paradigma del lenguaje en sí. Por eso es importante también la elección del lenguaje de programación a la hora de decidir un framework ya que este nos permitirá afrontar de manera más cómoda y más natural una serie de problemas para los que el paradigma de programación está pensado.

Los webframeworks pretenden establecer un patrón de funcionamiento para resolver ciertas tareas que una aplicación web nos va requerir. Estas son algunas de ellas:

  • Enrutado

  • Templating

  • MVC

  • Scaffolding

Los webframeworks pueden ser generalistas, o bien específicos para resolver una determinada área como un CMS, una tienda, un portal , etc…

A continuación te muestro una lista con Web Frameworks con su lenguaje de programación asociado:

  • Symphony ( PHP )

  • RoR ( Ruby on Rails )

  • Django ( Python )

  • Spring (Java)

  • Express ( NodeJS )

  • Meteor ( NodeJS )

AnteriorSecurizar servidor DNSSiguienteIIS con Windows server

Última actualización hace 7 meses

Para más info:

( Linux - Apache - MySQL - PHP)

( Linux - Engine X - MySQL - PHP)

( Mongo - ExpressJS - Angular - NodeJS)

: Rich internet application

: Single Page Application

Una diferencia con respecto a las RIA’s es que la barra de direcciones se modifica acorde al estado empleando la de HTML5, dando la sensación al usuario de estar navegando pero con la ventaja de evitar recargas de página). Esto significa:

Puedes consultar esta si quieres profundizar sobre el tema arquitectura

Si quieres saber más sobre cómo se comportan los distintos navegadores en su faceta de Network, visita este enlace :

CORS (Cross Origin Resource Sharing)

Mecanismo por el cual se puede limitar/restringir el uso de recursos de dominios fuera del dominio propio de la web vía cabeceras HTTP. Para más información sobre el tema, puedes consultar la entrada de la Wikipedia al respecto :

Ataques

Adicionalmente, en las páginas web se utilizan las llamadas "cookies", un pequeño texto introducido en el host de un usuario por un navegador web. Una cookie consiste en una o varias parejas nombre-valor que contienen cierta información como las preferencias de un usuario, contenidos de carros de la compra por Internet, identificadores de sesión u otros datos usados por distintos sitios web. Una cookie es enviada por medio de una cabecera HTTP desde un servidor web a un navegador web y luego devuelta por el navegador cada vez que tiene acceso a dicho servidor.

💟
🤕
🍪
https://www.w3schools.com/tags/ref_httpmethods.asp
LAMP
LEMP
MEAN
RIA
SPA
History API
Fuente
Browserscope
Cross-origin Resource Sharing
Técnicas de evasión de Filtros (OWASP)
Técnicas de Prevención de XSS (OWASP)
Lista de Ataques según la OWASP
HTTP Headers - The simplest security
WebAppSec / Web Security Verification
Tu Devops me da trabajo - Charla en Codemotion 2015 por Daniel García
Phoenix ( Elixir )
🗃️
Page cover image
HTTP: The Protocol Every Web Developer Must Know—Part 1Envato Tuts
Logo
HTTP: The Protocol Every Web Developer Must Know—Part 2Envato Tuts
Logo
Diagrama de funcionamiento de HTTP
Estructura del mensaje
Extraído del libro del servicios (perdón por la calidad)
Tabla de codigos
Diferencia HTTP y HTTPS
Funcionamiento de cliente-servidor
La lógica y la GUI están separadas
Esquema de RIA (algo anticuado)
Ejemplo de arquitectura de alta disponibilidad con balanceo de carga con JMAP
Hosting
Top 2024