diff --git a/Network/HTTP/Client/Request.hs b/Network/HTTP/Client/Request.hs
--- a/Network/HTTP/Client/Request.hs
+++ b/Network/HTTP/Client/Request.hs
@@ -23,6 +23,7 @@
 import Data.Maybe (fromMaybe, isJust)
 import Data.Monoid (mempty, mappend)
 import Data.String (IsString(..))
+import Data.Char (toLower)
 import Control.Monad (when, unless)
 import Numeric (showHex)
 
@@ -122,7 +123,7 @@
     failUri = throwM . InvalidUrlException (show uri)
 
     parseScheme URI{uriScheme = scheme} =
-        case scheme of
+        case map toLower scheme of
             "http:"  -> return False
             "https:" -> return True
             _        -> failUri "Invalid scheme"
diff --git a/http-client.cabal b/http-client.cabal
--- a/http-client.cabal
+++ b/http-client.cabal
@@ -1,5 +1,5 @@
 name:                http-client
-version:             0.3.0.1
+version:             0.3.0.2
 synopsis:            An HTTP client engine, intended as a base layer for more user-friendly packages.
 description:         This codebase has been refactored from http-conduit.
 homepage:            https://github.com/snoyberg/http-client
@@ -58,6 +58,7 @@
                        Network.HTTP.Client.ResponseSpec
                        Network.HTTP.Client.BodySpec
                        Network.HTTP.Client.HeadersSpec
+                       Network.HTTP.Client.RequestSpec
   build-depends:       base
                      , http-client
                      , hspec
@@ -68,7 +69,6 @@
                      , blaze-builder
                      , time
                      , network
-                     , zlib-bindings
                      , containers
                      , transformers
                      , deepseq
diff --git a/test/Network/HTTP/Client/RequestSpec.hs b/test/Network/HTTP/Client/RequestSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Network/HTTP/Client/RequestSpec.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Network.HTTP.Client.RequestSpec where
+
+import Test.Hspec
+import Network.HTTP.Client (parseUrl)
+
+spec :: Spec
+spec = describe "case insensitive scheme" $ do
+    let succeed s = it s $
+            case parseUrl s of
+                Nothing -> error "failed"
+                Just _ -> return () :: IO ()
+        failure s = it s $
+            case parseUrl s of
+                Nothing -> return () :: IO ()
+                Just req -> error $ show req
+    succeed "http://example.com"
+    succeed "httP://example.com"
+    succeed "HttP://example.com"
+    succeed "HttPs://example.com"
+    failure "ftp://example.com"
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,12 +1,1 @@
-import Test.Hspec
-import qualified Network.HTTP.Client.BodySpec as BodySpec
-import qualified Network.HTTP.Client.HeadersSpec as HeadersSpec
-import qualified Network.HTTP.Client.ResponseSpec as ResponseSpec
-import qualified Network.HTTP.ClientSpec as ClientSpec
-
-main :: IO ()
-main = hspec $ do
-    BodySpec.spec
-    HeadersSpec.spec
-    ResponseSpec.spec
-    ClientSpec.spec
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
