Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 tags2k
tags2k

HTTP: generarea antetului ETag

Cum pot genera un antet HTTP HTTP pentru un fișier de resurse?

24 2008-08-07T08:45:07+00:00 6
Programare
webserver
http
language-agnostic
header
etag
Comentarii la întrebare (0)
Mark Harrison
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#4540

Un etag este un șir arbitrar pe care serverul îl trimite clientului pe care clientul îl va trimite înapoi la server data viitoare când se solicită fișierul.

Etapa trebuie să fie calculată pe server pe baza fișierului. S-ar putea ca o sumă de control, dar s-ar putea să nu doriți să verificați fiecare fișier care îl trimite.

 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)

Am construit un șir în format "file inode number / datestamp / size file". Deci, dacă un fișier este schimbat pe server după ce acesta a fost difuzat clientului, etapa nou regenerată nu se va potrivi dacă clientul o solicită din nou.

char *mketag(char *s, struct stat *sb)
{
    sprintf(s, "%d/%d/%d", sb->st_ino, sb->st_mtime, sb->st_size);
    return s;
}
0
0
Comentarii (0)
grom
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#4563

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

În mod implicit, atât datele din Apache, cât și cele de pe IIS încorporează date în ETag, care reduc în mod drastic șansele testului de validitate pe site-urile web cu mai multe servere.

     

...

     

Dacă nu profitați de modelul flexibil de validare oferit de ETags, este mai bine să eliminați complet ETAG-ul.

0
0
Comentarii (0)
Justin Sheehy
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#6777

Atâta timp cât se schimbă ori de câte ori se schimbă reprezentarea resurselor, modul în care o produceți este total dependentă de dvs.

Ar trebui să încercați să o produceți într-un mod care, în plus:

  1. nu necesită să îl calculați din nou pe fiecare condiție GET și
  2. nu se modifică dacă conținutul resursei nu sa modificat

Utilizarea conținuturilor de conținut poate determina eșecul la # 1 dacă nu stocați hashes-ul calculat împreună cu fișierele.

Folosirea numerelor inode poate duce la eșec la # 2 dacă rearanjați sistemul de fișiere sau dacă difuzați conținut de pe mai multe servere.

Un mecanism care poate funcționa este de a folosi ceva complet dependent de conținut, cum ar fi un hash SHA-1 sau un șir de versiuni, calculat și stocat o dată la fiecare modificare a conținutului resurselor.

0
0
Comentarii (0)
Rich Bradshaw
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#106148

Aș recomanda să nu le folosiți și să mergeți pentru anteturi modificate ultima dată.

Askapache are un articol util pe această temă. (așa cum fac aproape orice se pare!)

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

0
0
Comentarii (0)
lolesque
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#7308209

Cum se generează apache etag implicit în bash

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

Chiar și atunci când căutam ceva exact ca etag (browserul cere un fișier numai dacă s-a schimbat pe server), nu a funcționat niciodată și am încheiat folosind un truc GET (adăugând o marcă de timp ca argument pentru a obține fișierele js ).

0
0
Comentarii (0)
peawormsworth
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#14057468

Am folosit Adler-32 ca o scurtătură de linkuri html. Nu sunt sigur dacă aceasta este o idee bună, dar până acum am observat că există duplicate. Poate funcționa ca un generator de etape. Și ar trebui să fie mai rapid decât încercarea de a hash folosind o schemă de criptare ca sha, dar eu nu am verificat acest lucru. Codul pe care îl folosesc este:

 shortlink = str(hex(zlib.adler32(link)+(2**32-1)/2))[2:-1]
0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire