Domanda

Sembra che ci siano due modi distinti per attuare le richieste condizionale mediante intestazioni HTTP, entrambi i quali possono essere utilizzati per la memorizzazione nella cache, le richieste di intervallo, il controllo della concorrenza, ecc ...:

  1. se-non modificato-Since e If-Modified-Since , in cui il client invia una timestamp della risorsa.
  2. If-Modified e If-None-Modified , in cui il client invia una ETag rappresentazione della risorsa.

In entrambi i casi, il client invia un pezzo di informazione a proposito della risorsa, che consente al server di determinare se la risorsa è cambiato da quando il cliente lo scorso vide. Il server decide se eseguire la richiesta a seconda della intestazione condizionale fornito dal cliente.

Non capisco il motivo per cui due approcci separati sono disponibili. Sicuramente, ETags sostituiscono timestamp, dal momento che il server potrebbe abbastanza facilmente scegliere di generare ETags dal timestamp.

Quindi, le mie domande sono:

  • In quali scenari potrebbero si favore se-non modificato-Since / If-Modified-Since over ETags?
  • In quali scenari potrebbero avete bisogno di entrambi?
È stato utile?

Soluzione

Una volta ho riflettuto la stessa cosa, e mi resi conto che c'è una differenza che è molto importante: Le date possono essere ordinati, ETags non può.

Questo significa che se qualche risorsa è stata modificata un anno fa, ma mai dato, e lo sappiamo. Poi possiamo rispondere correttamente un caso-non modificato-Since richiesta di date arbitrarie l'anno scorso e d'accordo che sicuro ... è stato modificato dopo tale data.

Un Etag è paragonabile solo per l'identità. O è lo stesso o non lo è. Se avete la stessa risorsa di cui sopra, e durante l'anno il docroot è stato spostato in un nuovo disco e file system, dando tutti i file nuovi inode ma conservando le date di modifica. E qualcuno aveva basato le ETags sul numero di inode del file. Quindi non si può dire che il vecchio ETag è ancora a posto, senza avere un registro di passato-ancora-bene-ETags.

Quindi non vedo loro come uno obsoleto l'altro. Essi sono per situazioni diverse. O si può facilmente ottenere una data Last-Modified di tutti i dati nella pagina che si sta per servire, oppure si può facilmente ottenere un ETag per quello che volete servire.

Se si dispone di una pagina web dinamica con i dati provenienti da un sacco di ricerche DB potrebbe essere difficile dire che cosa la data Last-Modified è senza rendere il database contiene un sacco di date di modifica. Ma si può sempre fare un checksum MD5 della pagina visualizzata risultato.

Quando sostenere questi protocolli di cache io sicuramente vado per uno solo di essi, mai entrambi.

Altri suggerimenti

Non è uno piuttosto grande differenza: posso solo usare ETags se ho già chiesto al server per uno in passato. Timestamps, OTOH, posso fare come vado avanti.

ragione semplice:. Backward-compatibilità

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top