HTTP: Erstellen von ETag-Header

stimmen
24

Wie erstelle ich einen ETag-HTTP-Header für eine Ressource-Datei?

Veröffentlicht am 07/08/2008 um 09:45
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
17

Solange sie sich ändert, wenn die Ressourcendarstellung ändert, wie Sie produzieren es vollständig bis zu Ihnen ist.

Sie sollten versuchen, sie in einer Weise zu produzieren, die zusätzlich:

  1. ist es nicht erforderlich, um neu zu berechnen sie auf jedem bedingten GET und
  2. ändert sich nicht, wenn der Inhalt der Ressource nicht geändert hat

Mit Hashes von Inhalten verursachen können Sie auf # 1 zum Scheitern verurteilt, wenn Sie die berechneten Hash-Werte nicht speichern zusammen mit den Dateien.

Inode-Nummern verwenden, können Sie veranlassen, auf Platz # 2 zum Scheitern verurteilt, wenn Sie Ihr Dateisystem neu anordnen oder Sie dienen Inhalt von mehreren Servern.

Ein Mechanismus, der arbeiten kann, ist etwas ganz Inhalt abhängig wie eine SHA-1-Hash zu verwenden oder eine Versionszeichenfolge, berechnet und gespeichert einmal, wenn Ihre Ressource Inhalt ändert.

Beantwortet am 09/08/2008 um 14:50
quelle vom benutzer

stimmen
16

Ein etag ist eine beliebige Zeichenfolge, dass der Server an den Client sendet, dass der Client das nächste Mal an den Server zurückgeschickt wird die Datei angefordert wird.

Der ETAG sollte auf der Datei basierend auf dem Server berechenbar sein. Wie eine Art Prüfsumme, aber Sie könnten nicht Prüfsumme es sendet jede Datei wollen, aus.

 server                client

        <------------- request file foo

 file foo etag: "xyz"  -------->

        <------------- request file foo
                       etag: "xyz" (what the server just sent)

 (the etag is the same, so the server can send a 304)

Ich baute eine Zeichenfolge im Format „Datei Inode-Nummer / Datumsstempel / Dateigröße“ auf. Also, wenn eine Datei auf dem Server geändert wird, nachdem es an den Client bedient worden war, die neu regenerierten ETAG nicht übereinstimmen, wenn der Client wieder aufgefordert werden.

char * mketag (char * s, struct stat * sb)
{
    sprintf (s, "% d /% d /% d", SB-> st_ino, SB-> st_mtime, SB-> st_size);
    kehrt zurück;
}
Beantwortet am 07/08/2008 um 09:57
quelle vom benutzer

stimmen
6

Von http://developer.yahoo.com/performance/rules.html#etags :

Standardmäßig einbetten sowohl Apache und IIS-Daten in dem ETag, die die Chancen der Gültigkeitsprüfung nachfolgenden auf Websites mit mehreren Servern drastisch reduziert.

...

Wenn Sie nicht die Vorteile der flexiblen Validierungsmodell nehmen, die ETags bieten, dann ist es besser, nur die ETag sogar komplett zu löschen.

Beantwortet am 07/08/2008 um 11:13
quelle vom benutzer

stimmen
2

Wie wird die Standard Apache etag in bash erzeugen

for file in *; do printf "%x-%x-%x\t$file\n" `stat -c%i $file` `stat -c%s $file` $((`stat -c%Y $file`*1000000)) ; done

Auch wenn ich nach etwas suche genau wie der ETAG (der Browser für eine Datei fragt nur, wenn es auf dem Server geändert hat), ist es nie gearbeitet und ich am Ende eines GET-Trick (das Hinzufügen eines Zeitstempels als get Argument an die js Dateien mit ).

Beantwortet am 05/09/2011 um 13:38
quelle vom benutzer

stimmen
1

Ive mit Adler-32 als HTML-Link Shortener. Ich bin nicht sicher, ob das eine gute Idee ist, aber so weit, ich habe keine Duplikate bemerkt. Es kann als ETAG Generator arbeiten. Und soll es schneller als mit einem Verschlüsselungsschema wie sha Hash versucht, aber ich habe dies bestätigt. Der Code, den ich verwenden ist:

 shortlink = str(hex(zlib.adler32(link)+(2**32-1)/2))[2:-1]
Beantwortet am 27/12/2012 um 16:58
quelle vom benutzer

stimmen
0

Ich würde empfehlen, sich nicht verwenden und ging für stattdessen letzten Änderung Header.

Askapache hat einen nützlichen Beitrag zu diesem Thema. (Wie sie so ziemlich alles tun, scheint es!)

http://www.askapache.com/htaccess/apache-speed-etags.html

Beantwortet am 19/09/2008 um 23:31
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more