diff --git a/Yesod/Internal/Core.hs b/Yesod/Internal/Core.hs
--- a/Yesod/Internal/Core.hs
+++ b/Yesod/Internal/Core.hs
@@ -372,6 +372,17 @@
     shouldLog :: a -> LogSource -> LogLevel -> Bool
     shouldLog a _ level = level >= logLevel a
 
+    -- | A Yesod middleware, which will wrap every handler function. This
+    -- allows you to run code before and after a normal handler.
+    --
+    -- Default: Adds the response header \"Vary: Accept, Accept-Language\".
+    --
+    -- Since: 1.1.6
+    yesodMiddleware :: GHandler sub a res -> GHandler sub a res
+    yesodMiddleware handler = do
+        setHeader "Vary" "Accept, Accept-Language"
+        handler
+
 {-# DEPRECATED messageLogger "Please use messageLoggerSource (since yesod-core 1.1.2)" #-}
 
 formatLogMessage :: IO ZonedDate
@@ -419,7 +430,7 @@
                    -> (Route sub -> Route master)
                    -> Maybe (SessionBackend master)
                    -> W.Application
-defaultYesodRunner logger handler master sub murl toMasterRoute msb req
+defaultYesodRunner logger handler' master sub murl toMasterRoute msb req
   | maximumContentLength master (fmap toMasterRoute murl) < len =
         return $ W.responseLBS
             (H.Status 413 "Too Large")
@@ -469,6 +480,7 @@
         case reads $ S8.unpack s of
             [] -> Nothing
             (x, _):_ -> Just x
+    handler = yesodMiddleware handler'
 
 data AuthResult = Authorized | AuthenticationRequired | Unauthorized Text
     deriving (Eq, Show, Read)
diff --git a/test/YesodCoreTest/Widget.hs b/test/YesodCoreTest/Widget.hs
--- a/test/YesodCoreTest/Widget.hs
+++ b/test/YesodCoreTest/Widget.hs
@@ -131,3 +131,4 @@
         { pathInfo = ["jshead"]
         }
     assertBody "<!DOCTYPE html>\n<html><head><title></title><script>alert(\"hello\");</script></head><body></body></html>" res
+    assertHeader "Vary" "Accept, Accept-Language" res
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.1.5
+version:         1.1.6
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
