Se ha recibido una petición GET o HEAD condicional que habría dado lugar a una respuesta 200 OK si no fuera porque la condición se evaluó como falsa.
El código HTTP 304 significa «Sin modificaciones» o «Not Modified» y no es realmente un error. Indica que el cliente ha realizado una solicitud con el encabezado «If-Modified-Since» o «If-None-Match» y el recurso solicitado no ha sido modificado desde la última vez que fue solicitado. En lugar de devolver el cuerpo de la respuesta, el servidor simplemente devuelve los encabezados de la respuesta, incluidos los encabezados «Last-Modified» o «ETag», que indican la fecha y hora de la última modificación del recurso. Esto permite al cliente almacenar en caché el recurso y reducir el ancho de banda y el tiempo de respuesta de la solicitud.
En otras palabras, no hay necesidad de que el servidor transfiera una representación del recurso de destino porque la petición indica que el cliente, que hizo la petición condicional, ya tiene una representación válida; por lo tanto, el servidor está redirigiendo al cliente para que haga uso de esa representación almacenada como si fuera la carga útil (payload) de una respuesta HTTP 200 OK.
El servidor que genera una respuesta del código HTTP 304 DEBE generar cualquiera de los siguientes campos de cabecera que se habrían enviado en una respuesta de Código HTTP 200 OK a la misma petición: Cache-Control, Content-Location, Date, ETag, Expires y Vary.
Dado que el objetivo de una respuesta del código 304 HTTP es minimizar la transferencia de información cuando el destinatario ya tiene una o más representaciones en la caché, un remitente NO DEBERÍA generar metadatos de representación distintos de los campos enumerados anteriormente, a menos que dichos metadatos existan con el fin de guiar las actualizaciones de la caché (por ejemplo, Last-Modified podría ser útil si la respuesta no tiene un campo ETag).
Los requisitos de una caché que recibe una respuesta HTTP 304 se definen en la sección 4.3.4 de la RFC7234. Si la solicitud condicional se originó con un cliente saliente, como un agente de usuario con su propia caché enviando un GET condicional a un proxy compartido, entonces el proxy DEBERÍA reenviar la respuesta 304 HTTP a ese cliente.
Una respuesta código 304 no puede contener un cuerpo de mensaje; siempre termina con la primera línea vacía después de los campos de cabecera.
Referencias de programación del Código HTTP 304
- Symfony HTTP Status Constant
Response::HTTP_NOT_MODIFIED
- Python2 HTTP Status Constant
httplib.NOT_MODIFIED
- Python3+ HTTP Status Constant
http.client.NOT_MODIFIED
- Python3.5+ HTTP Status Constant
http.HTTPStatus.NOT_MODIFIED
- Go HTTP Status Constant
http.StatusNotModified
- Rails HTTP Status Symbol
:not_modified
- .NET HTTP Status Constant
System.Net.HttpStatusCode.NotModified
- C# HTTP Status Enum
HttpStatusCode.NotModified
- Rust HTTP Status Constant
http::StatusCode::NOT_MODIFIED