Pregunta

Quiero crear una etiqueta electrónica que coincida con lo que produce Apache.¿Cómo crea Apache sus etiquetas electrónicas?

¿Fue útil?

Solución

Apache utiliza el formato estándar de inode-filesize-mtime.La única advertencia a esto es que el mtime debe ser de época y rellenarse con ceros para que tenga 16 dígitos.Aquí se explica cómo hacerlo en PHP:

$fs = stat($file);
header("Etag: ".sprintf('"%x-%x-%s"', $fs['ino'], $fs['size'],base_convert(str_pad($fs['mtime'],16,"0"),10,16)));

Otros consejos

Una cosa para recordar acerca de los Etags de Apache es que no funcionan bien en clústeres porque incluyen información de inodo que puede (y probablemente lo hará) variar entre máquinas en el mismo clúster.

Sin embargo, si estás generando tu página dinámicamente, probablemente esto no tenga sentido.Si estás en PHP, puedes elegir el inodo y el tamaño del archivo del script principal, pero el tiempo de modificación no te dirá si tus datos han cambiado.A menos que tenga un buen proceso de almacenamiento en caché o simplemente genere páginas estáticas, las etiquetas electrónicas no son útiles.Si tiene un buen proceso de almacenamiento en caché, el inodo y el tamaño del archivo probablemente sean irrelevantes.

Editar:Para la gente que no sabe que etiquetas lo son: se supone que son un valor que cambia cuando el contenido cambia, para fines de almacenamiento en caché.El navegador obtiene la etiqueta electrónica del servidor web, la compara con la etiqueta electrónica para obtener su copia en caché y luego recupera la página completa si la etiqueta electrónica ha cambiado.

la respuesta anterior (de Chris) funciona bien, pero se puede simplificar usando una conversión implícita en sprintf:

sprintf('"%x-%x-%x"', $s['ino'], $s['size'], str_pad($s['mtime'], 16, "0"));

lo sugerido %016x no funciona porque el relleno se aplica después de la conversión a hexadecimal, en lugar de antes.

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