¿Cuál podría ser la diferencia entre if-modified-since y if-none-match? Tengo la sensación de que if-none-match se usa para archivos, mientras que if-modified-since se usa para páginas.
89
Respecto a las diferencias entre Last-Modified/If-Modified-Since
y ETag/If-None-Match
:
Ambos se pueden usar indistintamente. Sin embargo, dependiendo del tipo de recurso y de cómo se genera en el servidor, una u otra pregunta ("¿se ha modificado desde ...?" / "¿Todavía coincide con esta ETag?") Puede ser más fácil de responder. .
Ejemplos:
mtime
como Last-Modified
fecha es la solución más simple.ETag
será mucho más fácil usar, por ejemplo, un hash md5 del contenido de la página . Consulte estos enlaces para obtener más detalles sobre el tema:
If-Modified-Since
se compara con elLast-Modified
mientras queIf-None-Match
se compara conETag
. AmbosModified-Since
yETag
se pueden utilizar para identificar una variante específica de un recurso.Pero la comparación de
If-Modified-Since
toLast-Modified
le brinda información sobre si la variante almacenada en caché es más antigua o más nueva, mientras que la comparación deIf-None-Match
toETag
solo le brinda información sobre si ambos son idénticos o no. Además, ¿la mayoría de losETag
generadores incluyen la información del inodo específico del sistema, por lo que mover un archivo a una unidad diferente también puede cambiar elETag
.fuente
El valor de la marca de tiempo utilizado en Last-Modified / If-Modified-Since tiene una precisión limitada: un segundo y eso simplemente no es suficiente para el contenido que cambia rápidamente como, por ejemplo, la aplicación de chat web donde se puede publicar más de un mensaje en un segundo dado . ETag / If-None-Match puede ayudar a resolver ese problema.
fuente
Como se indica en las mejores prácticas de Google:
https://developers.google.com/speed/docs/best-practices/caching
fuente
Last-Modified
conETag
(o, en el lado del agente de uso,If-Modified-Since
conIf-None-Match
). Del mismo modo, la especificación W3 no te restringe. Dice que no se useIf-Modified-Since
conIf-Match
, pero supongo que se debe a que el conjunto de documentos que tienen fechas actualizadas pero el mismo contenido definido por ETag debería ser bastante pequeño.If-Modified-Since usa una fecha, mientras que If-None-Match usa una ETag . Ambos se pueden utilizar para "páginas" (es decir, HTML) y otros archivos.
fuente
A menos que el servidor lo indique como débil, una ETag se considera un validador fuerte y, por lo tanto, se puede utilizar para satisfacer una solicitud de rango condicional. Sin embargo, la mayoría de los ETag generados automáticamente presentan dificultades en situaciones de granjas de servidores, ya que a menudo utilizan información de inodo y / o un contador persistente único. En la práctica, he encontrado que el encabezado Última modificación es suficiente para contenido bastante estático, por ejemplo, para servir contenido estático protegido, ya que el tiempo de escritura del archivo es un validador razonablemente bueno.
El ETag es, con mucho, el más flexible. Se requiere que los clientes conformes envíen el ETag en una solicitud condicional, mientras que DEBERÍAN enviar ambos si están disponibles.
fuente
El encabezado If-Modified-Since se utiliza para especificar el momento en el que el navegador recibió por última vez el recurso solicitado. El encabezado If-None-Match se utiliza para especificar la etiqueta de entidad que el servidor emitió con el recurso solicitado cuando se recibió por última vez.
De las dos formas descritas, estos encabezados se utilizan para admitir el almacenamiento en caché de contenido dentro del navegador, y permiten que el servidor indique al navegador que utilice una copia en caché de un recurso, en lugar de responder con el contenido completo del recurso si es no es necesario.
fuente