Altenwald Blog
Blog sobre programación, software libre, redes, servidores, ...
Menú
Acerca de... ¿Quiénes somos? RSS
Categorías
sistemas (70) desarrollo (128) historias (25) productividad (49) seguridad (10) libros (25) noticias (45) opinión (35) humor (3)
Etiquetas
programación (111) desarrollo de software (79) erlang (75) opinión (37) noticia (36) libros (28) servidores (26) desarrollo web (24) base de datos (24) administración de sistemas (23) php (22) desarrollo ágil (22) empresa (21) otp (20) ruby (19) ingeniería de negocio (18) elixir (18) desarrollo profesional (16) redes (16) seguridad (14)
2010-11-16
8 min sistemas
¿Cómo funciona el sistema web?
[ redes ]  [ http ]  [ navegador web ]  [ uri ]  [ url ]  [ web ]  [ como-funciona ] 

Hace ya tiempo escribí una entrada parecida basándome en el sistema de correo, hoy el tema que nos ocupa es la web. El sistema web es el medio más usado por todos los usuarios de Internet, constituyéndose como el sistema asociado por defecto a la idea preconcebida que se tiene sobre Internet: páginas web.

Actualización (22 de noviembre de 2018): ¿quieres saber un poco más de HTTP/2 y HTTP/3?

Actualización (24 de octubre de 2018): se han revisado los artículos referentes al tema cómo funciona. Si tienes alguna sugerencia acerca de algún servidor que quieras saber cómo funciona, déjanos un comentario.

Conceptos

Antes de comenzar a entrar en el tema, vamos a definir algunos conceptos muy útiles y a tener en cuenta, para no perdernos. Es importante conocer estas palabras y el significado que conllevan para poder entender, a posteriori, cómo funciona el sistema web:

http://host:port/uri

o

https://host:port/uri
/miruta/mifichero.ext?clave1=valor1&clave2=valor2

Peticiones: modo Cliente/Servidor

El sistema web se diseño para ser de modo cliente/servidor. Eso quiere decir que hay un elemento activo, en este caso el navegador web, que haría las veces de cliente, y un elemento pasivo, en este caso el servidor web, que haría las veces de servidor.

La dinámica siempre es la misma, el cliente realiza una conexión a través de la red para solicitar una página web, mediante una URL, y el servidor responde a esta URL con un mensaje en el que puede indicarle el contenido de lo solicitado (200 OK), que no encuentra la página (404 Not Found), que no tiene acceso a ese recurso (403 Forbidden), que necesite autenticarse antes (401 Authorization Required), que el recurso solicitado está en otra ubicación (302 Redirect), etc.

Formato de las Peticiones

Las peticiones pueden ser de varios tipos, pero básicamente, se nombran, para navegadores, dos: GET y POST. Cuando un cliente realiza una petición de URL de forma normal, esta se realiza siempre vía GET. En cambio, cuando se realiza mediante el envío de un formulario, presionando en el botón de tipo submit de una página web, este puede realizarse mediante POST (a menos que se explicite, en el propio código HTML, que se hará mediante GET u otro método que soporte el navegador web).

Por tanto, una petición se envía en formato texto, como sigue:

GET / HTTP/1.1
Host: www.google.es
User-Agent: Mozilla Firefox
Connection: close

La petición se divide en:

Formato de la respuesta

La respuesta que emite el servidor viene formada por una serie de líneas de texto en las que se indica el protocolo en el que se responde (normalmente HTTP/1.1), seguido de tres dígitos, el código de retorno, y un texto informativo sobre el retorno.

Al igual que en el caso de la solicitud, se incluyen cabeceras, y el cuerpo de la respuesta, que está separado de las cabeceras por una línea en blanco. Un ejemplo:

HTTP/1.1 200 OK
Date: Tue, 16 Nov 2010 02:30:00 GMT
Server: Apache/2.2.9 (Debian)
Content-Length: 4
Content-Type: text/plain

hola

En este caso, como se puede ver, el servidor también responde informando de su huella (la cabecera Server), donde especifica el tipo de servidor que es. En este caso, la respuesta tiene cuerpo de mensaje, de 4 bytes y de tipo texto plano (en formato MIME: text/plain).

Tipos de Respuestas

Las respuestas que puede dar un servidor web pueden ser:

código tipo
1xx respuesta temporal, el cliente seguirá esperando por una respuesta definitiva
2xx respuesta correcta
3xx redirección
4xx error de cliente (por no tener autorización, no encontrarse la página o similar)
5xx error de servidor (por fallo en el sistema servidor, de código o similar)

Para más información sobre los códigos se puede ver el anexo de códigos HTTP de la wikipedia.

Cookies

Debido a que el sistema web es lo que se conoce como stateless, es decir, que cada petición se realiza independientemente de las anteriores y siguientes, por lo que, en muchos sitios, para poder establecer una sesión o identificar a un usuario para poder usar sus preferencias preguardadas, o información sobre su navegación en nuestro sitio, se usan las polémicas cookies.

Una cookie es un dato que indica el servidor para el cliente, que debe de almacenarlo y enviarlo cada vez, hasta que se cumpla el tiempo límite en el que expira. Por ejemplo:

HTTP/1.1 200 OK
...
Set-Cookie: name=value; expire=Tue, 16-Nov-2010 15:00:00 GMT; path=/; domain=www.google.es
...

Las cookies tienen 4 partes,

  1. El par clave-valor, como si de una variable se tratase se establece el nombre de la cookie con el valor que contendrá.
  2. La expiración de la cookie, o caducidad. Pasada esa fecha, la cookie debe de ser destruida del navegador web para no volver a ser usada.
  3. La ruta es la URI base de la que cuelga la cookie. Para tenerla como referencia en su uso, y solo enviar la cookie cuando la ruta base se cumpla en la URI solicitada.
  4. El dominio para el que se configura la cookie. Este debe de ser igual a la cabecera host enviado en la petición, a menos que haya cambiado de dominio.

Una vez el servidor ha enviado esta información al navegador web, el navegador almacena (o solicita antes si se desea almacenar) dicha información como cookie, para reenviarla cada vez que se visite el dominio con la misma URI base. El navegador realiza las peticiones de la siguiente forma:

GET / HTTP/1.1
Host: www.google.es
Cookie: name=value
...

El tema de las cookies y la privacidad ha sido muy discutido y hay legislaciones (la de EEUU y Europa) que han incluido artículos para su regulación, ya que puede ser empleado como un medio para minar nuestra privacidad. Esto se puede leer de forma más amplia en este enlace.

Conclusiones

El protocolo HTTP, en el que se basa el sistema web, es el más usado en internet, junto con el correo electrónico. Con este artículo se pretende dar una visión un poco más a bajo nivel sobre cómo funciona dicho sistema, y se espera ampliar en un futuro con más artículos referentes a otros aspectos que conforman y completan al propio protocolo.

Autor
Manuel Rubio
Programación Concurrente & Erlanger