2013-02-14 9 views

risposta

11

Entrambi rappresentano un hashsum del corpo del messaggio.

Non proprio. Content-MD5 è un hash, ma ETag è un identificatore opaco: il client non sa cosa significa. È vero che un modo per generare uno ETag appropriato consiste nell'annullare i dati della risorsa, ma non è certamente l'unico.

Entrambi possono essere utilizzati per verificare se la risorsa è stata modificata dall'ultima volta richiesta da un client specifico.

È vero, anche se in entrambi i casi è possibile ottenere in teoria sia i falsi positivi che i falsi negativi.

Se fanno la stessa cosa, perché coesistono nella specifica RFC2616?

La coesistenza perché servono a scopi diversi; "Fanno cose identiche" non è vero.

Content-MD5 è progettato per consentire al client di verificare l'integrità della risorsa trasferita: il suo significato è ben definito e non deve essere utilizzato dopo che la risposta è stata ricevuta.

ETag deve essere utilizzato per il coordinamento della memorizzazione nella cache. Essendo opaco, consente di separare la semantica di un "identificatore di risorsa" dalla sua meccanica (in modo che il server possa scegliere di utilizzare qualsiasi schema di identificazione che desidera, ed è libero di cambiare questo schema in futuro senza che i client possano dire nulla sul processo). Inoltre, ETag supporta weak validation, consentendo a due versioni bitwise diverse di un resouce di essere considerate semanticamente equivalenti.