it-swarm.com.de

Wie funktioniert "304 Not Modified"?

  • Wie wird "304 Not Modified" generiert?

  • Wie ermittelt ein Browser, ob die Antwort auf eine http-Anfrage 304 lautet?

  • Wird es vom Browser festgelegt oder vom Server gesendet?

  • Woher kennt der Server die im Cache verfügbaren Daten, wenn sie vom Server gesendet werden, und wie legt er 304 für ein Image fest?

Meine Vermutung, wenn vom Browser generiert

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());

Ich verlasse mich auf einen API-Anbieter von Drittanbietern, um Daten abzurufen, zu analysieren und in die Datenbank zu übertragen. Die Daten können sich bei jeder Anforderung ändern oder nicht, aber der Header sendet immer 200. Ich möchte nicht analysieren, die letzte eindeutige ID in der Datenbank überprüfen usw., um die Datenänderung zu bestimmen Vergleichen Sie das Ergebnis direkt, stattdessen habe ich md5(), sha1() & crc32() das Ergebnis gehackt und funktioniert gut, wundere mich aber, dass der Algorithmus 304 ermittelt.

Ich möchte die gleiche Art von Algorithmus verwenden, um die Änderung der Daten zu bestimmen.

161
VenomVendor

Wenn der Browser etwas in seinen Cache legt, speichert er auch das Last-Modified oder ETag Header vom Server.

Der Browser sendet daraufhin eine Anfrage mit dem If-Modified-Since oder If-None-Match Header, der den Server anweist, 304 zu senden, wenn der Inhalt noch dieses Datum oder ETag hat.

Der Server benötigt eine Methode zum Berechnen eines Änderungs- oder ETag-Datums für jede Version jeder Ressource. Dies kommt normalerweise aus dem Dateisystem oder einer separaten Datenbankspalte.

188
SLaks

Zuletzt geändert: Das Datum der letzten Änderung für das angeforderte Objekt

If-Modified-Since: Ermöglicht die Rückgabe eines 304 Not Modified, wenn das Datum der letzten Änderung unverändert bleibt.

ETag: Ein ETag ist eine undurchsichtige Kennung, die von einem Webserver einer bestimmten Version einer Ressource zugewiesen wird, die sich unter einer URL befindet. Wenn sich die Ressourcendarstellung unter dieser URL ändert, wird ein neues und anderes ETag zugewiesen.

If-None-Match: Ermöglicht die Rückgabe eines 304 Not Modified, wenn ETag unverändert ist.

wenn Sie die URL erneut anfordern müssen, sendet der Browser eine Anforderungsnachricht mit dem Header an den Cache des Browserspeichers mit einem Datum (Zuletzt geändert) oder einer ID (ETag):

enter image description here

der Server gibt 304 zurück, wenn die if-Anweisung "False" ist, und der Browser verwendet den Cache.

16
宏杰李