Hola eugenioclrc
Ahí hay algo que me parece extraño... en la línea:
Código PHP:
if(($headers['If-None-Match'] == $this->etag )|| ($headers['If-Modified-Since'] == gmdate('D, d M Y H:i:s', $this->lastModified)) ){
Me parece que cuando un browser te envía el If-Modified-Since, lo que te manda es la fecha en la que él obtuvo el archivo en cuestión en un request anterior, sin embargo lo comparas con la última modificación real del archivo.
Creo que por eso es que no funciona, supongo que deberías verificar que si el If-Modified-Since es posterior a la fecha real de modificación, entonces es que tienes que enviar el 304