Entrambi rappresentano un hashsum del corpo del messaggio. Entrambi possono essere utilizzati per verificare se la risorsa è stata modificata dall'ultima volta in cui è stata richiesta da un client specifico. Se fanno una cosa identica, perché coesistono nella specifica RFC2616?Nel protocollo HTTP qual è la differenza tra ETag e Content-MD5?
risposta
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.