diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for tasty-wai
 
+## 0.1.2.0 -- 2022-07-27
+
+* Add `head` and `postWithHeaders` functions
+
 ## 0.1.1.1 -- 2020-09-24
 
 * Support wai-extra 3.1
diff --git a/src/Test/Tasty/Wai.hs b/src/Test/Tasty/Wai.hs
--- a/src/Test/Tasty/Wai.hs
+++ b/src/Test/Tasty/Wai.hs
@@ -10,7 +10,9 @@
 
     -- * Helpers
   , get
+  , head
   , post
+  , postWithHeaders
   , put
   , assertStatus'
 
@@ -23,6 +25,7 @@
   ) where
 
 import qualified Control.Exception    as E
+import           Prelude              hiding (head)
 
 import qualified Data.ByteString      as BS
 import qualified Data.ByteString.Lazy as LBS
@@ -31,7 +34,8 @@
 import           Network.HTTP.Types   (RequestHeaders, StdMethod)
 import qualified Network.HTTP.Types   as HTTP
 
-import           Test.HUnit.Lang      (HUnitFailure (HUnitFailure), formatFailureReason)
+import           Test.HUnit.Lang      (HUnitFailure (HUnitFailure),
+                                       formatFailureReason)
 
 import           Test.Tasty.Providers (IsTest (..), Progress (..), TestName,
                                        TestTree, singleTest, testFailed,
@@ -43,7 +47,8 @@
 import           Network.Wai.Test
 
 -- | Data structure for carrying around the info needed to build and run a test.
-data Sess = S Application TestName (Session ())
+data Sess
+  = S Application TestName (Session ())
 
 instance IsTest Sess where
   -- No options yet
@@ -110,6 +115,10 @@
 testWai :: Application -> TestName -> Session () -> TestTree
 testWai a tn = singleTest tn . S a tn
 
+-- | Submit a 'HTTP.HEAD' request to the provided endpoint.
+head :: BS.ByteString -> Session SResponse
+head = request . buildRequest HTTP.HEAD
+
 -- | Submit a 'HTTP.GET' request to the provided endpoint.
 get :: BS.ByteString -> Session SResponse
 get = request . buildRequest HTTP.GET
@@ -118,6 +127,9 @@
 -- 'LBS.ByteString' as the body content.
 post :: BS.ByteString -> LBS.ByteString -> Session SResponse
 post r = srequest . buildRequestWithBody HTTP.POST r
+
+postWithHeaders :: BS.ByteString -> LBS.ByteString -> RequestHeaders -> Session SResponse
+postWithHeaders path body headers = srequest $ buildRequestWithHeaders HTTP.POST path body headers
 
 -- | Submit a 'HTTP.PUT' request to the given endpoint with the provided
 -- 'LBS.ByteString' as the body content.
diff --git a/tasty-wai.cabal b/tasty-wai.cabal
--- a/tasty-wai.cabal
+++ b/tasty-wai.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                tasty-wai
-version:             0.1.1.1
+version:             0.1.2.0
 synopsis:            Test 'wai' endpoints via Test.Tasty
 description:         Helper functions and runners for testing wai endpoints using the Tasty testing infrastructure.
 license:             BSD3
@@ -27,6 +27,7 @@
                    , GHC == 8.6.5
                    , GHC == 8.8.3
                    , GHC == 8.10.1
+                   , GHC == 9.0.1
 
 source-repository head
     type: git
@@ -38,8 +39,8 @@
   -- other-modules:
   -- other-extensions:
 
-  build-depends:       base >= 4.8 && < 4.15
-                     , tasty >= 0.8 && < 1.4
+  build-depends:       base >= 4.8 && < 4.17
+                     , tasty >= 0.8 && < 1.5
                      , bytestring >= 0.10 && < 0.12
                      , wai == 3.2.*
                      , wai-extra >= 3 && < 3.2
@@ -60,8 +61,8 @@
   hs-source-dirs:      test
   main-is:             Test.hs
 
-  build-depends:       base >= 4.8 && < 4.15
-                     , tasty >= 0.8 && < 1.4
+  build-depends:       base >= 4.8 && < 4.17
+                     , tasty >= 0.8 && < 1.5
                      , wai == 3.2.*
                      , http-types >= 0.9 && < 0.13
                      , tasty-wai
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE OverloadedStrings #-}
 module Main where
 
+import           Prelude            hiding (head)
+
 import           Network.Wai        (Application)
 import qualified Network.Wai        as W
 
@@ -8,7 +10,7 @@
 
 import           Test.Tasty         (defaultMain, testGroup)
 import           Test.Tasty.Wai     (assertBody, assertStatus, assertStatus',
-                                     get, post, testWai)
+                                     get, head, post, postWithHeaders, testWai)
 
 testApp :: Application
 testApp rq cb = do
@@ -16,17 +18,25 @@
     mkresp s = W.responseLBS s []
     resp404 = mkresp H.status404
     resp200 = mkresp H.status200
+    resp204 = mkresp H.status204
 
-  resp <- case (W.requestMethod rq, W.pathInfo rq) of
+  resp <- case (W.requestMethod rq, W.pathInfo rq, W.requestHeaders rq) of
 
+    --
+    ("HEAD", ["hello"], _) -> pure $ resp204 ""
+
     -- Ye olde...
-    ("GET", ["hello"]) -> pure $ resp200 "world!"
+    ("GET", ["hello"], _)  -> pure $ resp200 "world!"
 
     -- Echo me this!
-    ("POST", ["echo"]) -> resp200 <$> W.strictRequestBody rq
+    ("POST", ["echo"], [])  -> resp200 <$> W.strictRequestBody rq
 
+    -- Echo me this fine JSON!
+    ("POST", ["echo"], [("content-type", "application/json")])  ->
+      resp200 . ("{'field':'" <>) . (<> "'}") <$> W.strictRequestBody rq
+
     -- Well, then...
-    _ -> pure $ resp404 "no route"
+    _                       -> pure $ resp404 "no route"
 
   cb resp
 
@@ -43,8 +53,19 @@
       assertStatus 200 res          -- Use raw ints
       assertBody "thus" res
 
+  , testWai testApp "Echo to thee" $ do
+      res <- postWithHeaders "echo" "thus" [("content-type", "application/json")]
+      assertStatus' H.status200 res -- Use functions from Network.HTTP.Types
+      assertStatus 200 res          -- Use raw ints
+      assertBody ("{'field':'thus'}") res
+
   , testWai testApp "Will die!" $ do
       res <- get "not-a-thing"
       assertStatus' H.status404 res
       assertBody "no route" res
+
+  , testWai testApp "Hello to World" $ do
+      res <- head "hello"
+      assertStatus' H.status204 res
+      assertBody "" res
   ]
