¿QUÉ ES HTTP(S)?
¿Qué es HTTP? (HyperText Transfer Protocol)
HTTP es lo que usamos cuando vemos un sitio web, desarrollado por Tim Berners-Lee y su equipo entre 1989-1991. HTTP es el conjunto de reglas usadas para comunicarse con los servidores web para la transmisión de datos de páginas web, tales como HTML, imágenes, vídeos, etc.
¿Qué es HTTPS? (HyperText Transfer Protocol Secure)
HTTPS es la versión segura de HTTP. Los datos en HTTPS están encriptados, por lo que no solo envita que alguien pueda ver qué datos estás enviando o recibiendo, sino que también te da garantías de que estás hablando con el servidor correcto y no con una suplantación.
Contesta las preguntas
- ¿Qué significa HTTP?
- ¿Qué significa la S de HTTPS?
- En la página del simulacro, a la derecha, hay un número. Una vez lo hayas encontrado, haz clic en él. ¿Cuál es la flag recibida?
PETICIONES Y RESPUESTAS
Cuando accedemos a un sitio web, nuestro navegador necesitará realizar peticiones a un servidor web para obtener activos como HTML, imágenes, y descargar las respuestas. Antes de eso, necesitaremos decirle al navegador de forma específica cómo y dónde acceder a estas fuentes, aquí es donde ayudan las URLs.
¿Qué es una URL? (Uniform Resource Locator)
Si has usado Internet, has usado las URL anteriormente. Una URL es predominantemente una instrucción de cómo acceder a un recurso en Internet. La imagen inferior muestra cómo es una URL con todas sus características (no se usan todas en cada petición).

Scheme: Explica qué protocolo usar para acceder al recurso, tales como HTTP, HTTPS, FTP (File Transfer Protocol).
User: Algunos servicios requieren autenticación para acceder, podemos poner un nombre de usuario y contraseña en la URL para acceder.
Host: El nombre de dominio o dirección IP del servidor al que quieres acceder.
Port: Puerto al que nos vamos a conectar, normalmente el 80 para HTTP y el 443 para HTTPS, pero pueden ser alojadas en cualquier puerto entre 1-65535.
Path: El nombre del archivo o ubicación del recurso al que intentamos acceder.
Query String: Bits extra de información que puede ser enviada a la ruta solicitada. Por ejemplo, /blog?id=1 le diría a la ruta del blog que queremos recibir el artículo del blog con id igual a 1.
Fragment: Es una referencia a la ubicación en la página solicitada. Se suele utilizar para páginas con mucho contenido y que pueden tener parte de la página directamente enlazada, de modo que el usuario pueda verla en cuanto acceda a ella.
Realizando una petición
Es posible hacer una petición a un servidor web en una sola línea: “GET / HTTP/1.1”

Pero para una experiencia web más enriquecedora, necesitaremos enviar también otros datos. Estos otros datos se envían en lo que llamamos cabeceras, donde las cabeceras contienen información extra para entregar al servidor web con el que nos comunicamos, pero volveremos a esto más adelante.
Ejemplo de Petición:

Si analizamos por separado cada línea de esta petición:
Línea 1: Esta petición envía el método GET (lo veremos más adelante), pide la página de inicio con / y le dice al servidor que estamos usando el protocolo HTTP en su versión 1.1.
Línea 2: Le decimos al servidor que queremos el sitio web tryhackme.com.
Línea 3: Se comunica al servidor que estamos usando el navegador Firefox en su versión 87.
Línea 4: Le decimos al servidor web que la página web que nos remitió a esta es https://tryhackme.com.
Línea 5: Las peticiones HTTP siempre acaban con una línea en blanco para informar al servidor web que la petición ha finalizado.
Ejemplo de Respuesta:

Si analizamos por separado cada línea de esta respuesta:
Línea 1: HTTP 1.1 es la versión del protocolo HTTP que el servidor está usando y va seguido del Código de Estado de HTTP, en este caso “200 OK”, que nos dice que la petición se ha completado con éxito.
Línea 2: Nos dice el software del servidor web y el número de versión.
Línea 3: La fecha actual, hora y zona horaria del servidor web.
Línea 4: La cabecera Content-Type le dice al cliente qué tipo de información se va a enviar, tal como HTML, imágenes, vídeos, pdf, XML.
Línea 5: Content-Length le dice al cliente la longitud de la respuesta, así podemos confirmar que no se han perdido datos.
Línea 6: Nuestra respuesta HTTP contiene una línea en blanco para confirmar el final de la respuesta HTTP.
Líneas 7-14: La información que ha sido solicitada, en este caso la página de inicio.
Contesta las preguntas
- ¿Qué protocolo HTTP se usa en el ejemplo de arriba?
- ¿Qué cabecera de la respuesta le dice al navegador cuántos datos esperar?
MÉTODOS HTTP
Los métodos HTTP son una forma para que el cliente muestre lo que quiere hacer cuando hace una petición HTTP. Hay un montón de métodos HTTP, aunque aquí nos ocuparemos solo de los más comunes, aunque con los que más tratarás será con los métodos GET y POST.
Petición GET
Usada para obtener información de un servidor web.
Petición POST
Se usa para enviar datos al servidor web y crear nuevos registros de forma potencial.
Petición PUT
Lo usamos para enviar datos al servidor web con la intención de actualizar información.
Petición DELETE
Se usa para eliminar información/registros de un servidor web.
Contesta las preguntas
- ¿Qué método usaríamos para crear una nueva cuenta de usuario?
- ¿Cuál es el método usaríamos para actualizar nuestra dirección de correo electrónico?
- ¿Qué método usaríamos para eliminar una imagen que hemos subido a nuestra cuenta?
- ¿Cuál es el método usaríamos para ver un artículo de noticias?
CÓDIGOS DE ESTADO HTTP
Códigos de estado HTTP:
En el apartado anterior hemos visto que, cuando un servidor HTTP responde, la primera línea siempre contiene un código de estado informando al cliente del resultado de su petición y potencialmente cómo manejarlo. Estos códigos de estado pueden dividirse en 5 rangos distintos:
100-199 – Respuesta de Información | Se envían para decirle al cliente que la primera parte de su petición ha sido aceptada y que debería continuar enviando el resto de su petición. Estos códigos no son muy comunes. |
200-299 – Éxito | Este rango de códigos de estado se usa para decirle al cliente que su petición era correcta. |
300-399 – Redirección | Estos se usan para redireccionar la petición del cliente a otro recurso. Puede ser tanto a una página web distinta como a un sitio web distinto. |
400-499 – Errores del Cliente | Usados para informar al cliente de que hubo un error en la petición. |
500-599 – Errores del Servidor | Están reservados para errores que vienen de la parte del servidor y normalmente indican un problema bastante importante con el servidor que gestiona la petición. |
Códigos de estado HTTP comunes:
Existen montones de códigos de estado HTTP distintos y eso sin contar que las aplicaciones pueden definir los suyos propios, por lo que vamos a ver las respuestas más comunes con las que nos encontraremos:
200 – OK | La petición se completó con éxito. |
201 – Creado | Se ha creado un recurso (por ejemplo, un nuevo usuario o una nueva entrada en un blog). |
301 – Redirección Permanente | Redirecciona al navegador del cliente a una nueva página web o les dice a los motores de búsqueda que la página ha sido movida a otro sitio y que busque allí. |
302 – Redirección Temporal | Similar al anterior, pero como el nombre sugiere, es solo un cambio temporal y puede cambiar de nuevo en un futuro cercano. |
400 – Petición Errónea | Le dice al navegador que algo fue mal o faltó en la petición. A veces se puede usar si el recurso del servidor web que está siendo solicitado esperaba cierto parámetro que el cliente no envió. |
401 – No Autorizado | No tenemos permiso para ver este recurso hasta que no nos autorice la aplicación web, comúnmente con un nombre de usuario y contraseña. |
403 – Prohibido | No tenemos permiso para acceder al recurso, tanto si hemos iniciado sesión como si no. |
404 – Página no Encontrada | La página/recurso solicitado no existe. |
405 – Método no Permitido | El recurso no permite este método de petición. Por ejemplo, si enviamos una petición GET a un recurso/creación de cuenta cuando esperaba una petición POST en su lugar. |
500 – Error de Servicio Interno | El servidor ha encontrado algún tipo de error en nuestra petición que no sabe cómo manejar adecuadamente. |
503 – Servicio no Disponible | Este servidor no puede manejar nuestra petición debido a que está sobrecargado o fuera de servicio por mantenimiento. |
Haz clic en el botón “View Site” de la derecha para ver cómo se ven algunos de estos mensajes de estado HTTP en un navegador.
Contesta las preguntas
- ¿Con qué código de respuesta recibiríamos si creáramos un nuevo usuario o un nuevo artículo en un blog?
- ¿Qué código de respuesta obtendríamos si intentáramos acceder a una página que no existe?
- ¿Cuál es el código de respuesta recibiríamos si el web server no pudiera acceder a su base de datos y la aplicación se bloquease?
- ¿Qué código de respuesta obtendríamos si intentáramos editar nuestro perfil sin iniciar sesión antes?
CABECERAS
Las cabeceras son bits de datos adicionales que enviamos al servidor web cuando hacemos peticiones.
Aunque las cabeceras no están requeridas estrictamente cuando hacemos una petición HTTP, nos será difícil ver un sitio web de forma apropiada.
Cabeceras de petición más comunes
Éstas son las cabeceras que se envían desde el cliente (normalmente tu navegador) al servidor.
Host: Algunos servidores web alojan múltiples sitios web por lo que, proporcionando la cabecera host le podemos decir cuál es el que queremos, de otra manera, solo recibiríamos el sitio web por defecto del servidor.
User-Agent: Es el software de tu navegador y su número de versión, diciéndole al servidor web que el software de tu navegador le ayuda a formatear el sitio web de la forma apropiada para tu navegador y también le indica algunos elementos de HTML, JavaScript y CSS que solo están disponibles en ciertos navegadores.
Content-Length: Cuando enviamos datos a un servidor web como un formulario, la longitud del contenido le dice al servidor web cuántos datos esperamos en la petición web. De esta forma el servidor puede asegurarse de no estar perdiendo datos.
Accept-Encoding: Le dice al servidor web qué tipos de métodos de compresión soporta el navegador para que los datos puedan minimizarse para poder transmitirlos por Internet.
Cookie: Datos enviados al servidor que ayudan a recordar tu información (ver la tarea de las cookies para más información).
Cabeceras de respuesta más comunes
Éstas son las cabeceras que devuelve el servidor al cliente después de una petición.
Set-Cookie: Información a almacenar que se envía al servidor web en cada petición (ver la tarea de las cookies para más información).
Cache-Control: Hasta cuándo almacenar el contenido de la respuesta en la caché del navegador antes de tener que pedirla de nuevo.
Content-Type: Le dice al cliente qué tipo de datos se están devolviendo (HTML, CSS, JavaScript, imágenes, PDF, vídeo, etc). Usando esta cabecera, el navegador sabe cómo procesar los datos.
Content-Encoding: Qué método se ha usado para comprimir los datos para minimizarlos cuando se han enviado por Internet.
Contesta las preguntas
- ¿Qué cabecera le dice al servidor web qué navegador se está usando?
- ¿Cuál es la cabecera que le dice al navegador qué tipo de datos se están devolviendo?
- ¿Qué cabecera le dice al servidor web qué sitio web ha sido solicitado?
COOKIES
Probablemente has oído hablar anteriormente de las cookies, son pequeñas piezas de datos almacenados en tu ordenador. Las cookies se guardan cuando recibimos una cabecera “Set-Cookie” del servidor web. Después, cada petición que hagamos, enviará los datos de la cookie de vuelta al servidor web.
Debido a que HTTP es un protocolo sin estado (no realiza rastreo de tus peticiones anteriores), las cookies se pueden usar para recordar al servidor web quiénes somos, algunos ajustes personales del sitio web o si hemos estado en ese sitio web anteriormente. Echemos un vistazo a esto con un ejemplo de petición HTTP:

Las cookies se pueden usar para varios propósitos, pero son más comúnmente utilizadas para la autenticación en sitios web. El valor de la cookie normalmente no será una cadena en texto plano donde podamos ver la contraseña, sino un token (código secreto único que no es descifrable por los humanos fácilmente).
Viendo tus cookies
Puedes ver fácilmente qué cookies envía tu navegador a un sitio web usando las herramientas de desarrollador en tu navegador. Si no estás seguro de cómo acceder a las herramientas de desarrollador, haz clic en el botón “View Site” en la parte superior de esta tarea para ver una guía de cómo hacerlo.
Una vez que tengas abiertas las herramientas de desarrollador, haz clic en la pestaña “Network”. Esta pestaña te mostrará una lista de todos los recursos que tu navegador ha solicitado. Puedes hacer clic en cada uno para recibir un desglose detallado de la petición y la respuesta. Si tu navegador envía una cookie, las verás en la pestaña “Cookies” de la petición.
Contesta las preguntas
- ¿Qué cabecera se usa para guardar las cookies en tu ordenador?
REALIZANDO PETICIONES
Haz clic en el botón “View Site” de la derecha.
Encontrarás un emulador para hacer demostraciones de peticiones HTTP, usando lo que has aprendido en las tareas anteriores para completar las siguientes preguntas.
Contesta las preguntas
- Realiza una petición GET a /room
- Realiza una petición GET a /blog y utilizando el icono del engranaje cambia el parámetro id a 1 en el campo URL
- Lleva a cabo una petición DELETE a /user/1
- Realiza una petición POST a /user/2 con el parámetro “username” con valor admin
- POST el nombre de usuario de thm y la contraseña de letmein para /login
Acceso al contenido original de TryHackMe: https://tryhackme.com/room/httpindetail