> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/ejpt-notes/pruebas-de-penetracion-de-aplicaciones-web/protocolo-http/fundamentos-del-protocolo-http-s/introduccion-a-http.md).

# Introducción a HTTP

## 📋 Introducción

* **HTTP** (Protocolo de Transferencia de Hipertexto) es un **protocolo de capa de aplicación** y **sin estado**, utilizado para la transmisión de recursos como datos de aplicaciones web.
* Funciona sobre el protocolo **TCP**.
* Fue diseñado específicamente para la **comunicación entre navegadores web** y **servidores web**.
* HTTP utiliza la **arquitectura típica cliente-servidor**:
  * El **navegador** actúa como **cliente**.
  * El **servidor web** actúa como **servidor**.
* Los recursos son identificados de manera única mediante una **URL** (Uniform Resource Locator) o **URI** (Uniform Resource Identifier).
* Existen **dos versiones principales** de HTTP:
  * **HTTP 1.0**
  * **HTTP 1.1**
    * **HTTP 1.1** es la versión más utilizada actualmente.
    * Ofrece varias ventajas frente a HTTP 1.0, como:
      * **Reutilización de la misma conexión** TCP para múltiples solicitudes.
      * **Capacidad de solicitar múltiples URI/recursos** en una única conexión.

***

## 🧩 Fundamentos del Protocolo HTTP

***

### 🔄 Flujo Básico de Comunicación HTTP

```plaintext
CLIENTE (Navegador)  →  Solicitud HTTP/S  →  SERVIDOR WEB
CLIENTE (Navegador)  ←  Respuesta HTTP/S  ←  SERVIDOR WEB
```

* Durante la comunicación HTTP:
  * El **cliente** envía **solicitudes HTTP** al **servidor**.
  * El **servidor** procesa estas solicitudes y envía **respuestas HTTP** al cliente.

***

### 🔤 Caracteres Especiales en HTTP

* &#x20;(**Carriage Return** o retorno de carro):
  * Mueve el cursor al **inicio de la línea actual**.
* &#x20;(**Line Feed** o salto de línea):
  * Mueve el cursor **hacia abajo a la siguiente línea**.
* **\r** (combinación retorno de carro + salto de línea):
  * Equivale a **presionar la tecla "Enter"** en el teclado.
  * Se utiliza para **delimitar líneas** en mensajes HTTP (por ejemplo, entre los encabezados de una solicitud o respuesta).
