diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike b/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
index 1b2465080c1bca1dd9a83df78d0fbc42b2a93b39..af4a989e9d4969c39cd618705fe57b9318c754c7 100644
--- a/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
+++ b/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
@@ -634,7 +634,6 @@ void response_and_finish(mapping m, function|void _log_cb)
    if (request_headers["if-modified-since"])
    {
       int t = .http_decode_date(request_headers["if-modified-since"]);
-
       if (t)
       {
 	 if (!m->stat && m->file)
@@ -648,6 +647,23 @@ void response_and_finish(mapping m, function|void _log_cb)
       }
    }
 
+   if (request_headers["if-none-match"] && m->extra_heads )
+   {
+       string et;
+       if((et = m->extra_heads->ETag) || (et =m->extra_heads->etag))
+       {
+           if( string key = request_headers["if-none-match"] )
+           {
+               if (key == et)
+               {
+                   m_delete(m,"file");
+                   m->data="";
+                   m->error=304;
+               }
+           }
+       }
+   }
+
    string header=make_response_header(m);
 
    if (m->stop) m->size=1+m->stop-m->start;