我的猜测,如果它是由浏览器生成的:
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());
我依靠第三方API提供商来获取数据,解析并将其推送到我的数据库中。在每次请求期间,数据可能会更改,也可能不会更改,但标头始终会发送200
。我不想解析,检查数据库中的最后一个唯一ID,等等。为了确定数据的变化,也不是直接比较结果,而是我md5()
,sha1()
和crc32()
对结果进行了散列处理,工作得很好,但我想知道确定304
的算法。
我想使用相同的算法来确定数据中的更改。
发布于 2014-01-08 01:41:37
当浏览器将某些内容放入其缓存中时,它还会存储来自服务器的Last-Modified
或ETag
标头。
然后,浏览器发送带有If-Modified-Since
或If-None-Match
报头的请求,告诉服务器如果内容仍然具有该日期或ETag,则发送304。
服务器需要某种方法来计算每个资源的每个版本的修改日期或ETag;这通常来自文件系统或单独的数据库列。
发布于 2017-03-06 10:19:01
Last-Modified :请求对象的最后修改日期
if - Modified - date :允许在上次修改日期不变时返回304 Not modified。
ETag : ETag是一种不透明的标识符,由web服务器分配给在URL中找到的资源的特定版本。如果该URL处的资源表示发生了变化,则会分配一个新的不同的ETag。
If-None-Match :如果ETag不变,允许返回304 Not Modified。
浏览器存储带有日期(Last-Modified)或id(ETag)的缓存,当您需要再次请求URL时,浏览器会发送带有头部的请求消息:
当if语句为False时,服务器将返回304,浏览器将使用缓存。
https://stackoverflow.com/questions/20978189
复制相似问题