-
如何生成“304 Not Modified”?
-
浏览器如何确定对http请求的响应是否为304?
-
是由浏览器设置还是从服务器发送?
-
如果由服务器发送,服务器如何知道缓存中可用的数据,它如何设置304到图像?
My guess, if generated by browser
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());
我依靠第三方API提供程序来获取数据,解析并将其推送到数据库 . 在每个请求期间数据可能会也可能不会发生变化,但是 Headers 总是发送 200
,我不想解析,检查DB中的最后一个唯一ID等等来确定数据的变化,也不直接比较结果我 md5()
, sha1()
& crc32()
HASHed结果&工作正常,但想知道算法确定 304
.
我想使用相同类型的算法来确定数据的变化 .
2 回答
当浏览器在其缓存中放入某些内容时,它还会存储服务器的
Last-Modified
或ETag
标头 .然后,浏览器发送带有
If-Modified-Since
或If-None-Match
标头的请求,如果内容仍具有该日期或ETag,则告知服务器发送304 .服务器需要某种方法来为每个资源的每个版本计算日期修改或ETag;这通常来自文件系统或单独的数据库列 .
浏览器存储缓存的日期(Last-Modified)或id(ETag),当您需要再次请求URL时,浏览器发送带有 Headers 的请求消息:
当if语句为False时,服务器将返回304,浏览器将使用缓存 .