¿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-Modified
oETag
del servidor.El navegador luego envía una solicitud con el encabezado
If-Modified-Since
oIf-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
ETag
es la palabra clave, marcada con encabezados,ETag
permanece igual en ambosResponse Headers
&Response Headers From Cache
, ¿puede decir el algoritmo detrásETag
? He actualizado mi pregunta indicando mi requisito.ETag
es 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