Pregunta

¿Cuál podría ser la diferencia entre si-ya-modificado y si ninguno-partido? Tengo la sensación de que si-None-Match se utiliza para archivos mientras que si-modified-since se utiliza para las páginas?

¿Fue útil?

Solución

En cuanto a las diferencias entre Last-Modified/If-Modified-Since y ETag/If-None-Match:

Ambos pueden ser utilizados indistintamente. Sin embargo, dependiendo del tipo de recurso, y la forma en que se genera en el servidor, una o la otra pregunta ( "esto ha sido modificado desde ...?" / "¿Todavía coincide con esta ETag?") Puede ser más fácil de responder .

Ejemplos:

  • Si usted está sirviendo archivos, utilizando mtime del archivo como la fecha Last-Modified es la solución más sencilla.
  • Si usted está sirviendo una página web dinámica construida a partir de una serie de consultas SQL, comprobando si los datos devueltos por cualquiera de esas consultas ha cambiado pueden ser poco prácticas (a menos que todos ellos tienen algún tipo de columna "última modificación") . En este caso, usando, por ejemplo un hash MD5 del contenido de la página como el ETag será mucho más fácil.
    Otoh, esto significa que usted todavía tiene que generar toda la página en el servidor, aunque sea por un GET condicional. Averiguar lo que tiene exactamente para entrar en la ETag (claves primarias, números de revisión, etc ...) se puede ahorrar mucho tiempo aquí.

Vea estos enlaces para obtener más detalles sobre el tema:

Otros consejos

If-Modified-Since se compara con el Last-Modified mientras If-None-Match se compara con ETag . Tanto Modified-Since y ETag se pueden usar para identificar una variante específica de un recurso.

Sin embargo, la comparación de If-Modified-Since a Last-Modified le da la información si la variante en caché es mayor o nueva , mientras que la comparación de If-None-Match a ETag sólo te da la información si ambos son idénticos o no. Además qué la mayoría de los generadores ETag incluyen la información del sistema específico para mover un archivo a una diferente de accionamiento puede cambiar el ETag también.

valor de marca de tiempo utilizado en la última actualización de precisión / If-Modified-Since ha limitado - un segundo y que simplemente no es suficiente para cambiar rápidamente el contenido como, por ejemplo, la aplicación web de chat donde más de un mensaje podría ser publicado en el un segundo dado. ETag / If-None-Match puede ayudar a resolver ese problema.

Como se afirma en las mejores prácticas de Google:

  

Es importante especificar uno de Expira o Cache-Control max-age, y uno de Last-Modified o ETag, para todos los recursos cacheables. Es redundante especificar tanto caduca y Cache-Control:. Max-age, o para especificar tanto Último-Modified y ETag

https://developers.google.com/speed/docs/best-practices/caching

If-Modified-Since utiliza una fecha , mientras que If-None-Match utiliza un ETag . Ambos pueden ser utilizados para "páginas" (es decir, HTML) y otros archivos.

Si no se indica como débil por el servidor, un ETag se considera un validador fuerte, y por lo tanto puede ser utilizados para cumplir con una solicitud condicional a distancia. Sin embargo, la mayor parte generada automáticamente las dificultades de exhibición eTags en situaciones de granjas de servidores, ya que a menudo utilizan la información de i-nodo y / o un contador persistente único. En la práctica, he encontrado la cabecera de última modificación que sea suficiente para el contenido bastante estática, por ejemplo sirviendo contenido estático protegido, ya que el tiempo de escritura del archivo hace una razonablemente buena validador.

El ETag es con mucho el más flexible. Se requieren los clientes que se ajusten a enviar el ETag en una solicitud condicional, que es conveniente enviar tanto si está disponible.

El If-Modified-Since encabezado se utiliza para especificar la hora a la que el navegador pasado recibió el recurso solicitado. La cabecera If-None-Match se utiliza para especificar la etiqueta de entidad que el servidor emitido con el recurso solicitado última vez que se recibió.

En las dos formas descritas, estas cabeceras se utilizan para apoyar el almacenamiento en caché de contenido en el navegador, y que el servidor pueda dar instrucciones al navegador para utilizar una copia en caché de un recurso, en lugar de responder con todo el contenido del recurso si esto no es necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top