Unidad 2: ¿Qué tengo que saber?
Usa esta lista para repasar la unidad. Ve marcando lo que ya dominas: se guarda en tu navegador, así que lo verás marcado cuando vuelvas desde el mismo equipo. Si no puedes marcar algún punto, vuelve a la presentación o al ejercicio correspondiente.
El protocolo HTTP
- Sé explicar los cuatro niveles de TCP/IP (aplicación, transporte, red y enlace), qué resuelve cada uno y qué dirección usa (URL y
Host, puerto, IP, MAC). - Sé explicar el encapsulamiento y qué cabecera lee cada equipo (switch, router, servidor web): por qué el router no ve la URL ni el
Host. - Sé explicar qué es HTTP: un protocolo de la capa de aplicación, de petición y respuesta, y sin estado.
- Identifico en qué puertos trabajan HTTP y HTTPS, y qué transporte usa cada versión (TCP en HTTP/1.1 y HTTP/2, QUIC sobre UDP en HTTP/3).
- ¿Sé diferenciar HTTP/1.1, HTTP/2 y HTTP/3, y qué es lo que no cambia entre ellas (métodos, códigos de estado y cabeceras)?
- Sé explicar cómo se establece una conexión TCP (saludo en tres pasos) y por qué las conexiones persistentes (keep-alive) ahorran tiempo.
La URL
- Identifico las partes de una URL: esquema, host, puerto, ruta, consulta y fragmento.
- Sé explicar qué parte de la URL va en la línea de petición, cuál en la cabecera
Hosty cuál no se envía al servidor.
Los mensajes HTTP
- Identifico la estructura de una petición: línea inicial (método, recurso y versión), cabeceras, línea vacía y cuerpo.
- Identifico la estructura de una respuesta: línea de estado (versión, código y descripción), cabeceras, línea vacía y cuerpo.
- Sé leer una petición y su respuesta en la salida de
curl -v: qué envía el cliente (>) y qué responde el servidor (<).
Métodos
- Sé explicar para qué sirven GET, HEAD, POST, PUT y DELETE.
- ¿Sé diferenciar dónde viajan los datos con GET (en la URL) y con POST (en el cuerpo)?
- Sé explicar por qué no se envían contraseñas por GET (quedan en el historial y en el
access.log) y por qué POST tampoco las protege sin HTTPS. - Sé explicar qué significa que GET y HEAD son métodos seguros.
Códigos de estado
- Identifico las cinco familias de códigos (1xx a 5xx) y qué indica cada una.
- Sé explicar los códigos que más se ven administrando un servidor: 200, 301, 302, 304, 401, 403, 404, 500, 502, 503 y 504.
- ¿Sé diferenciar 401 de 403, y 502 de 504?
- ¿Sé diferenciar una redirección permanente (301) de una temporal (302)?
Cabeceras
- Identifico las cabeceras más habituales de la petición (
Host,User-Agent,Accept,Cookie,Authorization) y de la respuesta (Content-Type,Content-Length,Server,Set-Cookie,Location,Cache-Control). - Sé explicar por qué
Hostes obligatoria en HTTP/1.1 y qué tiene que ver con los virtual hosts. - Sé explicar para qué sirve
Locationen una redirección. - Sé explicar por qué en producción se suele ocultar la versión que aparece en
Server.
Cookies y sesiones
- Sé explicar para qué sirven las cookies y cómo funcionan: el servidor la crea con
Set-Cookiey el navegador la devuelve conCookie. - Identifico para qué sirven los atributos de una cookie:
Max-Age/Expires,Path/Domain,HttpOnlyySecure. - Sé explicar cómo se mantiene una sesión en un protocolo sin estado: qué guarda el servidor y qué guarda el cliente.
- ¿Sé diferenciar una cookie de una sesión?
Aplicaciones que usan HTTP
- Sé explicar qué hace un servidor web y qué diferencia hay entre una página estática y una dinámica.
- ¿Sé diferenciar un proxy de un proxy inverso: en nombre de quién actúa cada uno y para qué se usa?
- ¿Sé diferenciar DNAT de un proxy inverso: en qué nivel trabaja cada uno, qué mira para decidir y cuántas conexiones TCP hay?
- Sé explicar qué es un balanceador de carga y su relación con el proxy inverso.
- Identifico ejemplos de software de cada uno (Squid, Apache, Nginx, HAProxy…).
Peticiones con curl
- Sé hacer con
curluna petición GET, ver solo las cabeceras (-I), seguir una redirección (-L) y ver todo el intercambio (-v). - Sé enviar datos a una página con GET (en la URL) y con POST (
-X POST -d), y comprobar la diferencia. - Sé ver con las herramientas para desarrolladores del navegador cuántas peticiones hace una página y sus cabeceras.
Servidores web: conceptos comunes
- Sé explicar qué es un virtual host y cómo elige el servidor el sitio que responde: por la cabecera
Host, y el sitio por defecto si no coincide con ninguno (por ejemplo, al entrar por la IP). - Sé probar varios virtual hosts sin DNS: con el
/etc/hostsdel cliente o concurl -H "Host: …". - Sé explicar qué fichero busca el servidor para una URL a partir del directorio raíz, y qué responde en cada caso: el fichero (200), el índice, el listado o un 403 si no hay índice, un 301 si falta la barra de un directorio, y un 404 si no existe.
- Sé explicar por qué el servidor atiende las peticiones con
www-datay qué permisos necesita (lectura en los ficheros y paso,x, en todos los directorios de la ruta). - Sé explicar para qué sirve un alias.
- ¿Sé diferenciar una redirección (3xx con
Location, la URL cambia) de una reescritura (interna, la URL no cambia)? - Sé explicar cómo funciona la autenticación básica (401,
Authorization: Basic) y por qué Base64 no protege la contraseña. - Sé explicar qué criterios puede usar el control de acceso y qué código devuelve si deniega el acceso (403).
- Sé leer una línea del
access.log(IP, usuario, fecha, línea de petición, código de estado…) y sé para qué sirve elerror.log.
Apache
- Sé explicar qué es un MPM y en qué se diferencian prefork, worker y event, y por qué al instalar
mod_phpDebian cambia a prefork. - Identifico para qué sirve cada parte de
/etc/apache2/(ports.conf,sites-*,mods-*,conf-*) y sé activar sitios y módulos (a2ensite,a2enmod). - Sé comprobar la configuración antes de recargar (
apache2ctl configtest,-S,-M) y la diferencia entrereloadyrestart. - Sé crear un virtual host (
ServerName,ServerAlias,DocumentRoot, logs propios) y explicar por qué responde000-defaultsi elHostno coincide. - Sé cambiar el puerto en el que escucha un sitio.
- Sé explicar para qué sirven
Options,AllowOverrideyRequireen un<Directory>, y por qué unDocumentRooto un alias fuera de/var/wwwda 403. - Sé configurar un
Aliasy una redirección conRedirect, y sé explicar por quéRedirect "/"produce un bucle y se usaRedirectMatch "^/$". - Sé configurar la autenticación básica (
htpasswd,AuthType Basic,Require valid-user) y el control de acceso conRequire ip. - ¿Sé diferenciar
<RequireAny>de<RequireAll>? - Sé explicar para qué sirve un
.htaccessy por qué no funciona conAllowOverride None. - Sé escribir una reescritura con
mod_rewrite(RewriteRule … [L]) y convertirla en redirección con[R=301]. - Sé ocultar la versión del servidor (
ServerTokens,ServerSignature) y cambiar el formato del log (LogFormat).
Nginx
- Sé explicar el modelo orientado a eventos de Nginx y en qué se diferencia de Apache con prefork.
- Identifico la estructura de
/etc/nginx/y sé activar un sitio (enlace ensites-enabled/,nginx -t,reload). - Sé crear un server block (
listen,server_name,root,index) y explicar qué hacetry_files. - Sé explicar qué sitio responde si el
Hostno coincide con ningúnserver_name(default_server). - Sé explicar cómo elige Nginx el bloque
location(exacta, prefijo más largo,^~y expresiones regulares) y predecir cuál responde a una URL. - ¿Sé diferenciar
root(añade la URL completa) dealias(sustituye el prefijo)? - Sé configurar la autenticación básica (
auth_basic) y el control de acceso por IP (allow/deny, en orden), y combinarlos consatisfy any. - Sé redirigir con
return(toda la web o solo la raíz conlocation = /) y reescribir conrewrite(last,permanent). - Sé explicar cómo ejecuta Nginx el PHP (PHP-FPM, FastCGI y el socket de
fastcgi_pass). - Sé usar snippets y cambiar el formato del log (
log_format,$http_<cabecera>).
Equivalencias y problemas frecuentes
- Sé traducir la configuración básica de Apache a Nginx y al revés (sitio, nombre, raíz, sitio por defecto, alias, listado, redirección, reescritura, acceso por IP, autenticación, PHP).
- Sé tener Apache y Nginx a la vez en puertos distintos y comprobar con
ss -tlnpqué proceso escucha en cada uno. - Sé investigar un 403, un 404, un 500 o un 502, por qué sale otro sitio o por qué no arranca el servidor (sintaxis, puerto ocupado), mirando el
error.log.