http - ejemplos - ¿Cómo funciona "304 Not Modified"?
django (2)
Ú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:
el servidor devolverá 304 cuando la instrucción if sea False, y el navegador usará caché.
¿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.