Referencia técnica independienteSitio oficial
  • Software y sistemas
  • Servicio HTTP

304

HTTP 304 Not Modified en servidor: recurso no modificado

Verificada con fuentes2 fuentesRevisada 18 oct 2026
¿Viene un técnico? Mira los 2 pasos que debe enseñarte

Nivel de riesgo

Seguro

Puedes actuar sin peligro siguiendo las comprobaciones seguras.

Urgencia

Media — atiéndelo hoy

Respuesta rápida

El código HTTP 304 (Not Modified) confirma que el servidor recibió un GET o HEAD condicional que habría devuelto 200 (OK), pero la condición resultó falsa porque tu copia en caché sigue siendo válida. Revisa los validadores ETag o Last-Modified y verifica que el 304 no lleve cuerpo.

Seguridad primero

Antes de continuar

  • No intentes enviar cuerpo ni trailers dentro de una respuesta HTTP 304: RFC 9110 sección 15.4.5 establece que toda respuesta 304 termina al concluir las cabeceras y cualquier dato extra corrompe el encuadre de mensajes.
  • No desactives por completo las cabeceras Cache-Control, ETag ni Vary para evitar respuestas 304 sin antes verificar qué validador envió el cliente en su petición condicional.

Puedes hacerlo con seguridad

  • Comprobar las cabeceras condicionales enviadas en la petición GET o HEAD (If-None-Match / If-Modified-Since)
  • Verificar que la respuesta 304 incluya las cabeceras exigidas por RFC 9110 y carezca de cuerpo
  • Confirmar cómo gestiona el cliente o el proxy compartido la reutilización de la representación almacenada

Deja estas tareas a un profesional cualificado

  • No intentes esta tarea profesional: Corrección del cálculo de validadores (ETag / Last-Modified) y cabeceras del 304 en el servidor o CDN
  • No intentes esta tarea profesional: Ajuste del cliente HTTP o proxy para reutilizar la caché local o no enviar condicionales sin copia guardada

Lo que un técnico debe poder justificar

Viene un técnico

Estos son los pasos que tiene que hacer y enseñarte. Márcalos mientras trabaja: si se salta pasos, no aceptes el cambio de pieza.

No son instrucciones para que abras o manipules el equipo. Son las comprobaciones que deben sostener una conclusión técnica.

  1. Corrección del cálculo de validadores (ETag / Last-Modified) y cabeceras del 304 en el servidor o CDN

    Qué haceCuando el servidor devuelve 304 Not Modified para recursos que ya cambiaron o cuando omite cabeceras obligatorias, el equipo de desarrollo backend o soporte de CDN/hosting debe corregir la generación de validadores y metadatos.

    Te tiene que enseñarla comparativa de cabeceras entre una respuesta 200 y una 304 del mismo recurso verificando que el ETag cambia al actualizar el contenido.

    Por escritoel ajuste aplicado en la generación de ETag/Last-Modified y la lista de cabeceras conservadas en las respuestas 304.

  2. Ajuste del cliente HTTP o proxy para reutilizar la caché local o no enviar condicionales sin copia guardada

    Qué haceSi una aplicación cliente falla al recibir un 304 sin cuerpo, el equipo de desarrollo debe actualizar el cliente para que sirva la representación almacenada en caché o deje de añadir cabeceras condicionales cuando no gestiona caché local.

    Te tiene que enseñarla prueba del cliente resolviendo el 304 con su representación en caché (o recibiendo 200 OK cuando no envía cabeceras condicionales).

    Por escritoel cambio en la capa de red del cliente y la política de revalidación adoptada.

Antes de aceptar una pieza o reparación

Aún no ha demostrado nada. No aceptes un cambio de pieza solo por el código.

Sigue estos pasos

Aviso: Sigue el orden documentado. Un código identifica el sistema afectado, pero por sí solo no demuestra qué pieza está averiada.

  1. Comprobar las cabeceras condicionales enviadas en la petición GET o HEAD (If-None-Match / If-Modified-Since)

    Requiere herramientas

    Quién:
    Tú como desarrollador o administrador de sistemas inspeccionando las cabeceras de red del cliente.
    Cómo:
    Revisa la solicitud GET o HEAD que recibió el estado 304 para identificar qué cabeceras de validación añadió la caché del cliente o proxy (como If-None-Match o If-Modified-Since) y compáralas con el ETag o Last-Modified actual del recurso en el servidor.
    Resultado que importa:
    Verificas si la solicitud era efectivamente un GET o HEAD condicional con un validador coincidente.
    Si la petición incluía If-None-Match o If-Modified-Since coincidente con la versión vigente del recurso, confirma que la respuesta 304 Not Modified es el ahorro de transferencia previsto por RFC 9110 sección 15.4.5.
    Si el recurso sí había cambiado en el origen pero el servidor devolvió 304 ante el validador antiguo, confirma un fallo en la generación de ETag o Last-Modified en el servidor.
    Evidencia a conservar:
    Conserva las cabeceras de la solicitud condicional y las cabeceras de la respuesta 304 para compararlas.

    No manipules ni desactives globalmente el almacenamiento en caché ni la validación condicional en producción sin antes comparar los validadores ETag y Last-Modified.

    Evidencia: IANA HTTP Status Code Registry · RFC 9110 - HTTP Semantics

  2. Verificar que la respuesta 304 incluya las cabeceras exigidas por RFC 9110 y carezca de cuerpo

    Requiere herramientas

    Quién:
    Tú como persona desarrolladora o responsable de operaciones desde un cliente HTTP de prueba.
    Cómo:
    Examina la respuesta 304 generada por tu servidor o proxy para comprobar que termina al final de la sección de cabeceras sin contenido ni trailers y que incluye cualquiera de los campos Content-Location, Date, ETag, Vary, Cache-Control y Expires que habría enviado en una respuesta 200 (OK).
    Resultado que importa:
    Compruebas el cumplimiento estricto de los metadatos y del cierre sin cuerpo de la respuesta 304.
    Si el 304 incluye Date, ETag, Vary, Cache-Control/Expires y Content-Location (cuando procedan en un 200) y no envía cuerpo, confirma que el servidor cumple RFC 9110 sección 15.4.5.
    Si el servidor inyecta cuerpo en el 304 o suprime cabeceras obligatorias como ETag, Vary o Cache-Control, confirma un defecto de implementación en el servidor o intermediario.
    Evidencia a conservar:
    Guarda la salida en bruto de las cabeceras de una respuesta 200 y de una respuesta 304 al mismo recurso.

    Realiza las consultas de verificación únicamente con métodos seguros de lectura (GET o HEAD).

    Evidencia: RFC 9110 - HTTP Semantics

  3. Confirmar cómo gestiona el cliente o el proxy compartido la reutilización de la representación almacenada

    Sin herramientas especiales

    Quién:
    Tú como desarrollador frontend/móvil o integrador del cliente HTTP.
    Cómo:
    Verifica si la petición condicional partió de la caché del navegador/cliente o de un proxy compartido intermedio, y comprueba que al recibir el 304 el cliente tome la representación guardada localmente como si fuera el contenido de un 200 (OK).
    Resultado que importa:
    Determinas si el fallo visible en la aplicación se debe a un cliente que rechaza códigos fuera de 2xx o que ignora su propia caché.
    Si el proxy compartido reenvía el 304 al cliente y este carga su representación almacenada sin error, descarta cualquier anomalía en el flujo de validación.
    Si tu código cliente envía manualmente If-None-Match sin disponer de la representación en caché o lanza excepción ante un 304 vacío, confirma que debes corregir el manejo del 304 en el cliente.
    Evidencia a conservar:
    Anota el fragmento del cliente HTTP o configuración del proxy donde se procesa la respuesta 304.

    Evidencia: RFC 9110 - HTTP Semantics

Situación no resuelta

Si el error persiste, no sigas probando por tu cuenta. Mira qué tiene que hacer y enseñarte el técnico.

Dónde se aplica este código

Un código solo tiene significado dentro del producto y la versión correctos.

Ámbito principal

Sistema
Software y sistemas
Marca
HTTP
Tipo de producto
Servicio HTTP

Variantes conocidas del código

  • 304 Nicht geändert
  • 304 No modificado
  • 304 Non modificato
  • 304 Non modifié
  • 304 Not Modified
  • événement Fronius 304
  • evento Fronius 304
  • Fronius Ereignis 304
  • Fronius event 304
  • Fronius inverter 304
  • Fronius Symo / Eco 304
  • Fronius Wechselrichter 304
  • HTTP 304
  • HTTP status 304
  • inversor Fronius 304
  • inverter Fronius 304
  • onduleur Fronius 304

Qué significa

Definido en la sección 15.4.5 de RFC 9110 e inscrito en el registro IANA dentro de la clase 3xx (Redirection), el estado HTTP 304 (Not Modified) indica que el servidor recibió una solicitud condicional GET o HEAD (por ejemplo, con cabeceras If-None-Match o If-Modified-Since) y redirige al cliente a reutilizar su representación ya almacenada como si fuera el contenido de una respuesta 200 (OK). El servidor que genera un 304 debe incluir los campos Content-Location, Date, ETag, Vary, Cache-Control y Expires que habría enviado en un 200, y la respuesta termina al final de la sección de cabeceras sin poder contener cuerpo ni trailers. Por sí solo, 304 nunca indica un fallo del servidor.

Advertencias y condiciones de parada

  • Precauciónverificada con fuente

    No intentes enviar cuerpo ni trailers dentro de una respuesta HTTP 304: RFC 9110 sección 15.4.5 establece que toda respuesta 304 termina al concluir las cabeceras y cualquier dato extra corrompe el encuadre de mensajes.

    Evidencia: RFC 9110 - HTTP Semantics

  • Seguroverificada con fuente

    No desactives por completo las cabeceras Cache-Control, ETag ni Vary para evitar respuestas 304 sin antes verificar qué validador envió el cliente en su petición condicional.

    Evidencia: RFC 9110 - HTTP Semantics

Síntomas y causas

Causas probables · en orden

  • Petición GET o HEAD condicional cuya precondición se evalúa como falsa al no haber cambiosConfirmada

    Según RFC 9110 sección 15.4.5, el servidor devuelve 304 Not Modified cuando recibe un GET o HEAD condicional que habría resultado en 200 (OK), pero la condición resulta falsa porque el cliente ya posee una representación válida.

    Evidencia: IANA HTTP Status Code Registry · RFC 9110 - HTTP Semantics

  • El cliente o script trata erróneamente el código 304 como un error o espera un cuerpo de respuestaFrecuente

    Como una respuesta 304 concluye exactamente al final de la sección de cabeceras y tiene prohibido incluir contenido o trailers, un cliente que no reutiliza su caché local o intenta leer un cuerpo en el 304 falla al procesar la respuesta.

    Evidencia: RFC 9110 - HTTP Semantics

  • Validadores ETag o Last-Modified desactualizados o cabeceras obligatorias omitidas en el 304Posible

    Si el servidor genera un 304 con un ETag que no cambia tras actualizar el recurso, o si omite las cabeceras obligatorias que habría enviado en un 200 (Content-Location, Date, ETag, Vary, Cache-Control y Expires), las cachés del navegador o del proxy compartido sirven contenido obsoleto.

    Evidencia: RFC 9110 - HTTP Semantics

Técnico virtual

¿Sigue apareciendo 304 tras comprobarlo?

Responde unas preguntas para acotar la causa probable y la siguiente acción segura. Es una orientación - nunca sustituye a un profesional.

Fuentes y referencias técnicas

  1. 1

    IANA HTTP Status Code Registry

    Internet Assigned Numbers Authority · 2025 · standard

  2. 2

    RFC 9110 - HTTP Semantics

    IETF / RFC Editor · 2022 · standard

Fuentes: IANA HTTP Status Code Registry · RFC 9110 - HTTP Semanticsrevisado 2026-10-18 · verificado

¿Te ha resultado útil esta ficha?