Как работает" 304 Not Modified"?
как генерируется "304 Not Modified"?
как браузер определяет, является ли ответ на http-запрос
это 304?он устанавливается браузером или отправляется с сервера?
если отправлено сервером, как сервер знает данные, доступные в кэше, также
как он устанавливает 304 на изображение?
мое предположение, если генерируется браузер
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, чтобы получить данные, проанализировать и подтолкнуть его к БД. Данные могут изменяться или не изменяться во время каждого запроса, но заголовок всегда отправляет 200, Я не хочу разбирать, проверять последний уникальный идентификатор в БД и так далее.. чтобы определить изменение данных, ни сравнить результат напрямую, а я md5(),sha1() & crc32() Хешированный результат & работает нормально, но интересно алгоритм для определения 304.
Я хочу использовать то же самое вид алгоритма для определения изменения данных.
2 ответов:
когда браузер помещает что-то в свой кэш, он также сохраняет
Last-ModifiedилиETagзаголовок с сервера.затем браузер отправляет запрос с
If-Modified-SinceилиIf-None-Matchзаголовок, сообщающий серверу отправить 304, если содержимое все еще имеет эту дату или ETag.сервер должен каким-то образом вычислить дату изменения или ETag для каждой версии каждого ресурса; это обычно происходит из файловой системы или отдельного столбца базы данных.
Last-Modified: дата последнего изменения для запрошенного объекта
If-Modified-Since: позволяет вернуть 304 не измененный, если последний дата изменения не изменилась.
ETag : представляет собой непрозрачный идентификатор, присваиваемый веб-сервером конкретную версию ресурса по URL. Если ресурс представление по этому URL-адресу когда-либо меняется, новый и другой ETag назначенный.
если-нет-Матч : позволяет 304 не Изменены, чтобы быть возвращены, если ETag является не менявшийся.
кэш хранилища браузера с датой (Последнее изменение) или идентификатором (ETag), когда вам нужно снова запросить URL-адрес, браузер отправляет сообщение запроса с заголовком:
сервер вернет 304, когда оператор if имеет значение False, и браузер будет использовать кэш.

Comments