¿Cómo funciona “304 Not Modified”?

  • ¿Cómo se genera “304 no modificado”?

  • ¿Cómo determina un navegador si la respuesta a una solicitud http es 304?

  • ¿Lo establece el navegador o lo envía desde el servidor?

  • Si el servidor lo envía, ¿cómo sabe el servidor los datos disponibles en caché, también cómo establece 304 en una imagen?

Supongo que si es generado por el navegador

function is_modified() { return get_data_from_cache() === get_data_from_url(); }; function get_data_from_cache() { return some_hash_or_xxx_function(cache_data); } function get_data_from_url() { return some_hash_or_xxx_function(new_data); } function some_hash_or_xxx_function(data) { // do something with data // what is that algorithm.? return result; } console.log(is_modified()); 

Confío en un proveedor de API externo para obtener datos, analizarlos y enviarlos a DB. Los datos pueden o no cambiar durante cada solicitud, pero el encabezado siempre envía 200 , no quiero analizar, verificar la última identificación única en DB, etc., para determinar el cambio en los datos, ni comparar el resultado directamente en vez I md5() , sha1() y crc32() HASHed el resultado y funciona bien, pero me pregunto si el algoritmo determinará 304 .

Quiero usar el mismo tipo de algoritmo para determinar el cambio en los datos.

Cuando el navegador coloca algo en su caché, también almacena el encabezado Last-Modified o ETag del servidor.

El navegador luego envía una solicitud con el encabezado If-Modified-Since o If-None-Match , indicándole al servidor que envíe un 304 si el contenido aún tiene esa fecha o ETag.

El servidor necesita alguna forma de calcular un ETag modificado por fecha para cada versión de cada recurso; esto normalmente proviene del sistema de archivos o una columna de base de datos separada.

Última modificación: la última fecha de modificación para el objeto solicitado

If-Modified-Since: permite la devolución de un 304 Not Modified si la fecha de la última modificación no se modifica.

ETag: un ETag es un identificador opaco asignado por un servidor web a una versión específica de un recurso que se encuentra en una URL. Si alguna vez cambia la representación de recursos en esa URL, se asigna una ETag nueva y diferente.

If-None-Match: permite la devolución de un 304 Not Modified si ETag no se modifica.

la memoria caché de la tienda del navegador con una fecha (última modificación) o identificación (ETag), cuando necesita solicitar la URL nuevamente, el navegador envía el mensaje de solicitud con la cabecera:

enter image description here

el servidor devolverá 304 cuando la instrucción if sea False, y el navegador usará caché.