diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # ChangeLog for yesod-core
 
+## 1.6.27.0
+
+* Build with `wai-extra-3.1.17` [#1861](https://github.com/yesodweb/yesod/pull/1861)
+
 ## 1.6.26.0
 
 * Always apply jsAttributes to julius script blocks of body [#1836](https://github.com/yesodweb/yesod/pull/1836)
diff --git a/src/Yesod/Core/Dispatch.hs b/src/Yesod/Core/Dispatch.hs
--- a/src/Yesod/Core/Dispatch.hs
+++ b/src/Yesod/Core/Dispatch.hs
@@ -1,8 +1,9 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
 module Yesod.Core.Dispatch
     ( -- * Quasi-quoted routing
       parseRoutes
@@ -63,6 +64,9 @@
 import qualified Data.ByteString.Lazy as BL
 import qualified Data.ByteString.Char8 as S8
 import Data.ByteString.Builder (byteString, toLazyByteString)
+#if !MIN_VERSION_wai_extra(3,1,14)
+import Data.Default (def)
+#endif
 import Network.HTTP.Types (status301, status307)
 import Yesod.Routes.Parse
 import Yesod.Core.Types
@@ -78,7 +82,12 @@
 import Network.Wai.Middleware.Autohead
 import Network.Wai.Middleware.AcceptOverride
 import Network.Wai.Middleware.RequestLogger
-import Network.Wai.Middleware.Gzip
+import Network.Wai.Middleware.Gzip (
+    gzip,
+#if MIN_VERSION_wai_extra(3,1,14)
+    defaultGzipSettings,
+#endif
+ )
 import Network.Wai.Middleware.MethodOverride
 
 import qualified Network.Wai.Handler.Warp
@@ -244,7 +253,12 @@
 -- Since 1.2.0
 mkDefaultMiddlewares :: Logger -> IO W.Middleware
 mkDefaultMiddlewares logger = do
-    logWare <- mkRequestLogger def
+    logWare <- mkRequestLogger
+#if MIN_VERSION_wai_extra(3,1,8)
+        defaultRequestLoggerSettings
+#else
+        def
+#endif
         { destination = Network.Wai.Middleware.RequestLogger.Logger $ loggerSet logger
         , outputFormat = Apache FromSocket
         }
@@ -254,7 +268,14 @@
 --
 -- Since 1.2.12
 defaultMiddlewaresNoLogging :: W.Middleware
-defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverride
+defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip gzipSettings . methodOverride
+  where
+    gzipSettings =
+#if MIN_VERSION_wai_extra(3,1,14)
+        defaultGzipSettings
+#else
+        def
+#endif
 
 -- | Deprecated synonym for 'warp'.
 warpDebug :: YesodDispatch site => Int -> site -> IO ()
diff --git a/yesod-core.cabal b/yesod-core.cabal
--- a/yesod-core.cabal
+++ b/yesod-core.cabal
@@ -1,5 +1,5 @@
 name:            yesod-core
-version:         1.6.26.0
+version:         1.6.27.0
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -39,6 +39,7 @@
                    , conduit-extra
                    , containers            >= 0.2
                    , cookie                >= 0.4.3    && < 0.6
+                   , data-default
                    , deepseq               >= 1.3
                    , entropy
                    , fast-logger           >= 2.2
@@ -124,7 +125,7 @@
     -- Workaround for: http://ghc.haskell.org/trac/ghc/ticket/8443
     other-extensions:      TemplateHaskell
 
-    build-depends: base
+    build-depends: base < 5
                  , hspec
                  , containers
                  , bytestring
@@ -185,14 +186,14 @@
     cpp-options:   -DTEST
     if os(windows)
         cpp-options: -DWINDOWS
-    build-depends:  base
+    build-depends:  base < 5
                   , async
                   , bytestring
                   , clientsession
                   , conduit
                   , conduit-extra
                   , containers
-                  , cookie >= 0.4.1    && < 0.5
+                  , cookie >= 0.4.1    && < 0.6
                   , hspec >= 1.3
                   , hspec-expectations
                   , http-types
@@ -215,7 +216,7 @@
     default-language: Haskell2010
     type: exitcode-stdio-1.0
     hs-source-dirs: bench
-    build-depends:  base
+    build-depends:  base < 5
                   , blaze-html
                   , bytestring
                   , gauge
