1-2-Estructura de la Solicitud HTTP

 

Estructura de la Solicitud HTTP

text
GET /usuarios HTTP/1.1           ← Línea de inicio (Request Line)
Host: mipagina.com               ←
Content-Type: application/json    ←
Authorization: Bearer token123    ← HEADERS (Cabeceras)
User-Agent: Mozilla/5.0...       ←
                                  ← Línea en blanco (separador)
{"nombre": "Juan"}               ← BODY (Cuerpo)

Desglose Detallado:

1. Línea de Inicio (Request Line)

text
GET /usuarios HTTP/1.1
  • Método: GET

  • Path: /usuarios

  • Protocolo: HTTP/1.1

2. HEADERS (Cabeceras) - ¡Esta es la parte que preguntas!

text
Host: mipagina.com
Content-Type: application/json
Authorization: Bearer token123
User-Agent: Mozilla/5.0...

Los headers son todas las líneas que están después de la Request Line y antes de la línea en blanco.

3. Línea en Blanco

text
(espacio vacío)

Esta línea separa los headers del body - es crucial en el protocolo HTTP.

4. BODY (Cuerpo)

text
{"nombre": "Juan"}

Solo presente en métodos como POST, PUT, PATCH.

Ejemplos Prácticos en Laravel:

Accediendo a estos Headers en Laravel:

php
Route::post('/usuarios', function(Request $request) {
    // Obtener headers específicos
    $host = $request->header('Host'); // 'mipagina.com'
    $contentType = $request->header('Content-Type'); // 'application/json'
    $authorization = $request->header('Authorization'); // 'Bearer token123'
    $userAgent = $request->header('User-Agent'); // 'Mozilla/5.0...'
    
    // Obtener todos los headers
    $todosLosHeaders = $request->headers->all();
    
    // Obtener el token del header Authorization
    $token = $request->bearerToken(); // 'token123'
    
    return response()->json([
        'host' => $host,
        'content_type' => $contentType,
        'token' => $token,
        'user_agent' => $userAgent
    ]);
});

Headers Comunes y su Uso:

php
public function miEndpoint(Request $request)
{
    // Headers de Autenticación
    $token = $request->bearerToken();
    $apiKey = $request->header('X-API-Key');
    
    // Headers de Contenido
    $contentType = $request->header('Content-Type');
    $accept = $request->header('Accept'); // Qué formato espera el cliente
    
    // Headers de Caché
    $cacheControl = $request->header('Cache-Control');
    
    // Headers Personalizados
    $customHeader = $request->header('X-Mi-Header');
    
    // Verificar si el cliente acepta JSON
    if ($request->wantsJson()) {
        return response()->json(['message' => 'OK']);
    }
}

Enviar Headers en Respuesta:

php
public function crearUsuario(Request $request)
{
    $user = User::create($request->all());
    
    return response()
        ->json($user, 201)
        ->header('X-Custom-Header', 'Valor')
        ->header('Location', url('/usuarios/' . $user->id))
        ->header('Content-Type', 'application/json; charset=utf-8');
}

Ejemplo Real de una API:

php
// El cliente envía esta solicitud:
// POST /api/usuarios HTTP/1.1
// Host: miapi.com
// Content-Type: application/json
// Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
// Accept: application/json
//
// {"name": "Ana", "email": "ana@ejemplo.com"}

Route::post('/api/usuarios', function(Request $request) {
    // Verificar header de autorización
    if (!$request->bearerToken()) {
        return response()->json(['error' => 'No autorizado'], 401);
    }
    
    // Verificar que el contenido sea JSON
    if ($request->header('Content-Type') !== 'application/json') {
        return response()->json(['error' => 'Content-Type debe ser JSON'], 415);
    }
    
    // Procesar la solicitud
    $data = $request->validate([
        'name' => 'required',
        'email' => 'required|email'
    ]);
    
    $user = User::create($data);
    
    return response()
        ->json($user, 201)
        ->header('X-User-ID', $user->id);
});

En resumen: Los headers son todas las líneas entre la primera línea (Request Line) y la línea en blanco que separa del body. ¡Son fundamentales para controlar el comportamiento de la solicitud HTTP!

Comentarios

Entradas más populares de este blog

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas