- ¿Cómo se generan las respuestas "304 no modificadas"? 
- ¿Cómo determina un navegador si la respuesta a una solicitud HTTP es 304? 
- ¿Es configurado por el navegador o enviado desde el servidor? 
- Si lo envía el servidor, ¿cómo sabe el servidor los datos disponibles en caché, y también cómo establece 304 en una imagen? 
Mi conjetura, 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 the 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 mi base de datos. Los datos pueden o no cambiar durante cada solicitud, pero el encabezado siempre envía 200. No quiero analizar, verificar la última ID única en DB y así sucesivamente ... para determinar el cambio en los datos, ni comparar el resultado directamente en lugar de yo md5(), sha1()y crc32()el resultado hash y funciona bien, pero me pregunto sobre el algoritmo para determinar 304.
Quiero usar el mismo tipo de algoritmo para determinar el cambio en mis datos.
fuente

Respuestas:
Cuando el navegador coloca algo en su caché, también almacena el encabezado
Last-ModifiedoETagdel servidor.El navegador luego envía una solicitud con el encabezado
If-Modified-SinceoIf-None-Match, dicié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 una fecha modificada o ETag para cada versión de cada recurso; Esto generalmente proviene del sistema de archivos o de una columna de base de datos separada.
fuente
ETages la palabra clave, marcada con encabezados,ETagpermanece igual en ambosResponse Headers&Response Headers From Cache, ¿puede decir el algoritmo detrásETag? He actualizado mi pregunta indicando mi requisito.ETages solo un campo en el que el servidor puede almacenar una ID única (generalmente un hash o número de versión o reloj vectorial). No te ayuda a calcular esa identificación en absoluto; eso depende de su código del lado del servidor.max-age, ¿necesita el navegador hacer la solicitud? (ya que podría tropezar en 304 y no hacer la solicitud en absoluto) ... desea esto, por ejemplo, con activos de "huellas digitales" (son buenos para siempre). De lo contrario, cuál es el punto demax-age...el caché de la tienda del navegador con una fecha (Última modificación) o id (ETag), cuando necesita solicitar la URL nuevamente, el navegador envía un mensaje de solicitud con el encabezado:
el servidor devolverá 304 cuando la instrucción if es False, y el navegador usará caché.
fuente