diff --git a/mighttpd2.cabal b/mighttpd2.cabal
--- a/mighttpd2.cabal
+++ b/mighttpd2.cabal
@@ -1,5 +1,5 @@
 Name:                   mighttpd2
-Version:                3.3.1
+Version:                3.3.2
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -57,7 +57,7 @@
                       , unordered-containers
                       , wai >= 3.2 && < 3.3
                       , wai-app-file-cgi >= 3.1.1 && < 3.2
-                      , warp >= 3.2.6 && < 3.3
+                      , warp >= 3.2.7 && < 3.3
 
 Executable mighty
   Default-Language:     Haskell2010
@@ -82,8 +82,9 @@
                       , streaming-commons
                       , wai >= 3.2 && < 3.3
                       , wai-app-file-cgi >= 3.1.1 && < 3.2
-                      , wai-logger >= 2.2.2
-                      , warp >= 3.2.6 && < 3.3
+                      , wai-logger >= 2.3.0
+                      , warp >= 3.2.7 && < 3.3
+                      , wai-http2-extra
   if flag(tls)
     Build-Depends:      tls
                       , warp-tls >= 3.2 && < 3.3
diff --git a/src/Server.hs b/src/Server.hs
--- a/src/Server.hs
+++ b/src/Server.hs
@@ -21,6 +21,8 @@
 import Program.Mighty
 import WaiApp
 
+import Network.Wai.Middleware.Push.Referer
+
 #ifdef HTTP_OVER_TLS
 import Control.Concurrent.Async (concurrently)
 import Control.Monad (void)
@@ -65,11 +67,12 @@
     ap <- initLogger FromSocket logtype zdater
     let lgr = apacheLogger ap
         remover = logRemover ap
+        pushlgr = serverpushLogger ap
     mgr <- getManager opt
     setHandlers opt rpt svc remover rdr
 
     report rpt "Mighty started"
-    runInUnboundThread $ mighty opt rpt svc lgr mgr rdr tlsSetting
+    runInUnboundThread $ mighty opt rpt svc lgr pushlgr mgr rdr tlsSetting
     report rpt "Mighty retired"
     finReporter rpt
     remover
@@ -141,10 +144,11 @@
 ----------------------------------------------------------------
 
 mighty :: Option -> Reporter -> Service
-       -> ApacheLogger -> ConnPool -> RouteDBRef
+       -> ApacheLogger -> ServerPushLogger
+       -> ConnPool -> RouteDBRef
        -> TLSSettings
        -> IO ()
-mighty opt rpt svc lgr mgr rdr _tlsSetting
+mighty opt rpt svc lgr pushlgr mgr rdr _tlsSetting
   = reportDo rpt $ case svc of
     HttpOnly s  -> runSettingsSocket setting s app
 #ifdef HTTP_OVER_TLS
@@ -156,7 +160,8 @@
     _ -> error "never reach"
 #endif
   where
-    app req = fileCgiApp cspec filespec cgispec revproxyspec rdr req
+    app = pushOnReferer defaultMakePushPromise
+                        (fileCgiApp cspec filespec cgispec revproxyspec rdr)
     debug = opt_debug_mode opt
     -- We don't use setInstallShutdownHandler because we may use
     -- two sockets for HTTP and HTTPS.
@@ -168,6 +173,7 @@
             $ setFileInfoCacheDuration 10
             $ setServerName      serverName
             $ setLogger          lgr
+            $ setServerPushLogger pushlgr
             defaultSettings
     serverName = BS.pack $ opt_server_name opt
     cspec = ClassicAppSpec {
