Location
Uso
Los servidores incluyen Location cuando dirigen a los clientes a una URL distinta. La cabecera aparece en dos contextos: respuestas de redirección y creación de recursos.
En las redirecciones, el valor de Location indica al cliente a dónde debe enviar la siguiente solicitud. El comportamiento depende del código de estado:
En la creación de recursos, una respuesta 201 Created incluye Location apuntando al recurso recién creado. Esto da al cliente una referencia directa sin necesidad de una búsqueda posterior.
El valor de Location admite tanto URL absolutas como relativas. Las URL relativas se resuelven respecto al URI de la solicitud.
Nota
La cabecera Location y la cabecera Content-Location tienen propósitos distintos. Location apunta al destino de la redirección o al recurso recién creado. Content-Location identifica la URL directa de la representación devuelta.
Nota
Los motores de búsqueda siguen las redirecciones y transfieren la autoridad de los enlaces (valor de posicionamiento) a la URL de destino en las redirecciones permanentes (301, 308). Las redirecciones temporales (302, 307) no siempre transmiten esa autoridad. Usar el código de estado correcto durante las migraciones de URL preserva las posiciones en los buscadores.
URL
El valor es una única referencia URI que apunta a la ubicación de destino.
Location: <url>
La URL es o bien un URI absoluto con esquema y host, o bien una referencia relativa que se resuelve respecto al URI de la solicitud.
Ejemplo
Una redirección permanente de un dominio antiguo a uno nuevo indica a los clientes que actualicen marcadores y enlaces. Con 301, los clientes pueden cambiar el método de la solicitud de POST a GET.
HTTP/1.1 301 Moved Permanently
Location: https://new.example.re/products
Una redirección permanente 308 conserva el método de la solicitud original, lo que hace que la redirección sea segura para POST y otras solicitudes distintas de GET.
HTTP/1.1 308 Permanent Redirect
Location: https://new.example.re/products
Tras crear un recurso mediante una solicitud POST, el servidor devuelve 201 con la Location del nuevo recurso.
HTTP/1.1 201 Created
Location: /api/orders/7891
Content-Type: application/json
Una respuesta 303 después del envío de un formulario redirige al cliente a una página de resultados mediante GET.
HTTP/1.1 303 See Other
Location: /search/results?q=http+headers
Diagnóstico
Los fallos de redirección suelen manifestarse como bucles infinitos, URL rotas o cabeceras ausentes en la respuesta.
Bucle de redirección. La cabecera Location apunta de nuevo a la URL actual o a otra URL que redirige de vuelta, creando un ciclo infinito. Los navegadores se detienen tras un número determinado de saltos y muestran un error ERR_TOO_MANY_REDIRECTS. Rastree la cadena con curl -L -v para identificar el bucle. Entre las causas habituales están una regla de servidor que redirige HTTP a HTTPS mientras un equilibrador de carga redirige HTTPS de vuelta a HTTP, o reglas nginx return 301 que coinciden con la URL de destino. En nginx, use guardas if ($scheme = http) de forma acotada y pruebe con ambos protocolos.
La URL relativa no se resuelve correctamente. El valor de Location admite referencias relativas, pero algunos clientes antiguos e intermediarios esperan una URL absoluta. Una ruta como /new-page se resuelve respecto al URI de la solicitud. Omitir la barra inicial crea una ruta relativa que se resuelve respecto al directorio actual y produce resultados inesperados. Use URL absolutas con esquema y host para evitar ambigüedades.
Falta la cabecera Location en una respuesta 3xx. Un código de estado de redirección sin cabecera Location deja al cliente sin destino. Los navegadores muestran una página en blanco o un error. Compruebe la respuesta del servidor con curl -I https://example.re/old-path y confirme que la cabecera está presente. En Apache, las directivas Redirect y RedirectMatch siempre incluyen la cabecera. El código de aplicación personalizado debe establecerla explícitamente.
Discrepancia de protocolo en el destino de la redirección. Una URL HTTP en la cabecera Location dentro de un sitio HTTPS provoca advertencias de contenido mixto o bloquea la redirección en entornos estrictos. Asegúrese de que la URL de destino coincida con el protocolo de origen o que se actualice a HTTPS. En nginx, use return 301 https://$host$request_uri; para mantener el esquema seguro.
El fragmento no se conserva entre redirecciones. El identificador de fragmento (#section) de la URL original no se reenvía en la cabecera Location. Los navegadores vuelven a añadir el fragmento original al destino de la redirección solo cuando la URL de destino no contiene un fragmento propio. Si el valor de Location incluye un fragmento distinto, el original se pierde. El código del lado del servidor no tiene acceso a los fragmentos, ya que los navegadores no los envían en las solicitudes.
Depuración de cadenas de redirección. Ejecute curl -L -v https://example.re/start para seguir todas las redirecciones y ver cada salto con sus códigos de estado y cabeceras. La pestaña Network de DevTools también muestra la cadena completa. Filtre por tipo de documento para aislar las respuestas de redirección de las solicitudes de subrecursos.