> 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/solicitudes-http.md).

# Solicitudes HTTP

## 🔹 1. Línea de Solicitud (Request Line)

La **línea de solicitud** es la **primera línea** de una petición HTTP. Contiene tres elementos clave:

* **Método HTTP** (como `GET`, `POST`, `PUT`, `DELETE`, etc.):\
  Indica el tipo de operación que se desea realizar.
* **URL** (Localizador Uniforme de Recursos):\
  La dirección del recurso al que el cliente quiere acceder.
* **Versión del protocolo HTTP**:\
  Especifica la versión del protocolo utilizada (por ejemplo, `HTTP/1.1`).

***

## 🔹 2. Cabeceras de Solicitud (Request Headers)

Las **cabeceras HTTP** proporcionan información adicional sobre la solicitud. Algunas comunes son:

* **User-Agent**: Informa al servidor sobre el tipo de cliente (navegador, sistema operativo, etc.).
* **Host**: Indica el nombre del servidor (por ejemplo, `www.google.com`).
* **Accept**: Define los tipos de contenido que el cliente puede aceptar (HTML, JSON, XML...).
* **Authorization**: Incluye credenciales para autenticación (si es necesario).
* **Cookie**: Envía cookies almacenadas en el cliente al servidor.

***

## 🔹 3. Cuerpo de Solicitud (Request Body) – *Opcional*

* Algunos métodos HTTP (como `POST` o `PUT`) pueden incluir un cuerpo de solicitud con datos que se envían al servidor.
* Estos datos suelen estar en formato **JSON**, **formulario (`application/x-www-form-urlencoded`)**, o **multipart/form-data**.

***

## 🧾 Ejemplo de Solicitud HTTP

```http
GET / HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0
Accept: text/html,application/xhtml+xml
Accept-Encoding: gzip, deflate
Connection: keep-alive
```

Este ejemplo es una solicitud **GET** enviada por un navegador al acceder a `www.google.com`.\
Está compuesta por:

* **Request Line** → `GET / HTTP/1.1`
* **Headers** → `Host`, `User-Agent`, `Accept`, etc.
* **Body** → No tiene (las solicitudes GET generalmente no llevan cuerpo).

***

## 📌 Métodos HTTP Explicados (HTTP Verbs)

| Método      | Función                                                                    |
| ----------- | -------------------------------------------------------------------------- |
| **GET**     | Recupera datos del servidor. Es seguro e idempotente (no modifica nada).   |
| **POST**    | Envía datos al servidor. Puede generar cambios. No es idempotente.         |
| **PUT**     | Crea o actualiza un recurso, reemplazándolo completamente. Es idempotente. |
| **DELETE**  | Elimina el recurso especificado. También es idempotente.                   |
| **PATCH**   | Modifica parcialmente un recurso (diferente de PUT).                       |
| **HEAD**    | Como GET, pero solo recupera las cabeceras de respuesta.                   |
| **OPTIONS** | Devuelve los métodos y opciones soportadas por el servidor.                |

***

## 📍 Ruta/URL en HTTP

* Especifica el recurso solicitado.
* La página de inicio de un sitio web siempre se representa como `/`.
* Otras rutas pueden ser: `/descargas/index.php`, `/login`, etc.
* Siempre comienzan con `/`, refiriéndose al **directorio raíz** del servidor.

***

## 📐 Versión del Protocolo HTTP

* Especificada en la línea de solicitud, por ejemplo: `HTTP/1.0` o `HTTP/1.1`.
* Determina cómo se gestionará la conexión (por ejemplo, persistente o no).

***

## 🔧 Detalles de Algunas Cabeceras Comunes

### 🏷️ Host

* Especifica el dominio al que se quiere acceder.
* Permite que varios sitios web compartan una misma IP.

### 🌐 User-Agent

* Identifica el navegador, sistema operativo y otras características del cliente.
* Ejemplo: `Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0)...`.

### 📥 Accept

* Define los formatos MIME que acepta el cliente.
* Ejemplo: `text/html`, `application/json`.

### 🗜️ Accept-Encoding

* Indica qué algoritmos de compresión acepta el cliente.
* Ejemplo: `gzip`, `deflate`.

### 🔄 Connection

* Usado en HTTP/1.1 para mantener la conexión abierta.
* Valor `keep-alive` permite enviar varias solicitudes por la misma conexión TCP.
